2014-08-31 19 views
5

Ich versuche, eine gespeicherte Prozedur in C# aufzurufen.Gespeicherte Prozedur Funktioniert nicht von C# code

using (SqlConnection connection = new SqlConnection(connectionString)) 
    using (SqlCommand command = connection.CreateCommand()) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     command.CommandText = "updateData"; 
     command.Parameters.Add(new SqlParameter("@inrego", rego)); 
     command.Parameters.Add(new SqlParameter("@inOprt", oprt)); 
     command.Parameters.Add(new SqlParameter("@inService", service)); 

     connection.Open(); 

     int update = command.ExecuteNonQuery(); 

     Console.WriteLine(update); 

     connection.Close(); 
    } 

Update zeigt 1 auf Konsole, aber die Datenbank wird noch nicht aktualisiert.

Dies ist die gespeicherte Prozedur

CREATE PROCEDURE [dbo].updateData 
@inrego varchar(5), 
@inOprt char(3), 
@inService as varchar(50) 

AS 
delete from buses where rego = @inrego; 
insert into buses (rego, operator,service) values(@inrego, @inOprt, @inService); 
RETURN 0 

die gespeicherte Prozedur Laufen funktioniert manuell, auch bekannt als

USE [C:\USERS\---\DOCUMENTS\VISUAL STUDIO 2013\PROJECTS\---\TEST.DB.MDF] 
GO 

DECLARE @return_value Int 

EXEC @return_value = [dbo].[updateData] 
     @inrego = N'1', 
     @inOprt = N'2', 
     @inService = N'3' 

SELECT @return_value as 'Return Value' 

GO 

Werke und aktualisiert die Datenbank erfolgreich, aber die C# -Code Form nicht.

+0

Haben Sie versucht http://stackoverflow.com/questions/4492536/how-run-a-stored-procedure-with-parameters-has-a-return-value-from-code-behi? –

+0

Ich vermute, dass Sie nur "dbo.updateData" für den Anruf benötigen. –

+0

Probieren Sie es einfach @EugenePodskal. Gleiche Ergebnisse leider. – matthew5025

Antwort

4

Ich habe es nicht gelungen, das Problem auf saubere lokale Datenbank (MS SQL Express 2013, Win 8.1, .NET 4.5) zu reproduzieren:

CREATE TABLE [dbo].buses 
(
    [rego] varchar(5) NOT NULL PRIMARY KEY, 
    [operator] char(3), 
    [service] varchar(50) 
) 
static void UpdateOrInsertBuses(String rego, String oprt, String service) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     using (SqlCommand command = connection.CreateCommand()) 
     { 
      command.CommandType = CommandType.StoredProcedure; 
      command.CommandText = "updateData"; 
      command.Parameters.Add(new SqlParameter("@inrego", rego)); 
      command.Parameters.Add(new SqlParameter("@inOprt", oprt)); 
      command.Parameters.Add(new SqlParameter("@inService", service)); 

      connection.Open(); 
      try 
      { 
       int update = command.ExecuteNonQuery(); 

       Console.WriteLine(update); 
      } 
      catch (Exception exc) 
      { 
       Console.WriteLine(exc.Message); 
      } 
      finally 
      { 
       connection.Close(); 
      } 
     } 
    } 
} 

// ... 
// Add data 
UpdateOrInsertBuses("11", "12", "13"); 
UpdateOrInsertBuses("21", "22", "23"); 

// Update added 
UpdateOrInsertBuses("21", "22", "Changed for sure"); 

So ist es einige Probleme, das nicht bezieht sich zu deinem aktuellen Code. Wie von @ Gordon Linoff vorgeschlagen, ist es entweder ein Berechtigungsproblem oder ein Auslöser, der sich in die Aktualisierungen einmischt, oder die Datenbank kehrt aus irgendwelchen Gründen zurück oder ignoriert alle Änderungen.

+0

Ich bin eigentlich "Microsoft SQL Server-Datenbankdatei (SqlClient)" als Datenquelle, ich werde versuchen, mit einem SQL Server. – matthew5025

+0

Nur mit SQL Server 2014 versucht, und es funktioniert. Danke vielmals! – matthew5025

+0

Also, ist das Problem nur für Datenbankdateien relevant, nicht für gehostete? Hmm, ich werde später mit Datenbank-DB versuchen, nur um zu überprüfen. –

Verwandte Themen