2012-04-14 1 views
1

UPDATE: mein Code verhält sich wie erwartet, da in der gespeicherten Prozedur ein Tippfehler enthalten war, der der Grund war, dass es fehlschlug.ExecuteNonQuery im Hintergrund ohne Fehler fehlgeschlagen


Ich kann nicht scheinen, um herauszufinden, warum und wie dies zu beheben, weil ich keine Fehler bekommen bin, was ich bin immer wird der Rückgabewert ist 0, was bedeutet, fehlschlagen.

Hier ist mein .net Code:

SqlParameter returnValue= new SqlParameter("returnValue", SqlDbType.Int); 
returnValue.Direction = ParameterDirection.ReturnValue; 
cmd.Parameters.Add(returnValue); 

cmd.ExecuteNonQuery(); 

result = Convert.ToInt32(returnValue.Value); //1 success and 0 failed 

Meine gespeicherten Prozedur:

CREATE PROCEDURE EmployeeUpdate 
    @employee_id BIGINT, 
    @name nvarchar(250) 
AS 
BEGIN 
    SET NOCOUNT ON 

    DECLARE @Result int 
    SET @Result = 0 

    UPDATE Employee 
    SET name = @name 
    WHERE employee_id = @employee_id     

    IF (@@rowcount = 1) 
    BEGIN 
     SET @Result = 1  
    END 

    SET NOCOUNT OFF 

    RETURN @Result 
END 

Also, wenn ich die gespeicherte Prozedur von SQL Server Management Studio nur ausführen, tut es meine Reihe erfolgreich aktualisieren, ohne jeder Fehler

EXEC EmployeeUpdate 34,'John John' 

Return Value = 1 

Antwort

1

Ich würde vorschlagen, ReturnValue Parameter insgesamt zu entfernen und einfach die verwenden Rückgabewert von ExecuteNonQuery() Methode statt:

int rowsAffected = cmd.ExecuteNonQuery(); 

result = rowsAffected == 1 ? 1 : 0; 

Stored Procedure:

CREATE PROCEDURE EmployeeUpdate 
     @employee_id BIGINT, 
     @name nvarchar(250) 
AS 
BEGIN 
     UPDATE Employee 
     SET name = @name 
     WHERE employee_id = @employee_id     
END 
+0

immer noch die gleichen, nachdem sp Modifizieren .... '-1' –

+0

Haben Sie Trigger auf die Tabelle, die ein Rollback verursachen könnten? Was erhalten Sie in SQL Management Studio, wenn Sie die vereinfachte Version der oben genannten gespeicherten Prozedur ausführen? d. h. EXEC EmployeeUpdate 34, 'John John' – BluesRockAddict

+0

habe keine Trigger auf der Tabelle, überprüfe das einfach. –

2

Ersetzen die folgenden

CREATE PROCEDURE EmployeeUpdate 
     @employee_id BIGINT, 
     @name nvarchar(250) 
AS 
BEGIN 
     SET NOCOUNT ON 

mit folgenden

CREATE PROCEDURE EmployeeUpdate 
     @employee_id BIGINT, 
     @name nvarchar(250) 
AS 
BEGIN 
     SET NOCOUNT OFF 

SET NOCOUNT auf diese Zahl von Zeilen Effekt durch T-SQL ist, anzeigt, wird nicht

SET NOCOUNT OFF bedeutet, dass die Anzahl der Zeilen Effekt durch T-SQL zurückgegeben werden, wird zurückgegeben.

enter image description here enter image description here

+0

nach dem ändern habe ich immer noch den gleichen returnvalue = 0 .... ergggg –

+0

gibt es noch einen anderen weg zu debuggen? –

+0

Ja, Sie haben einen anderen Weg. Bitte gehen Sie zur 'Datenbank'.Führen Sie nun den 'Stored-Proc' im' SSMS' aus. So, 'EmployeeUpdate 1, 'PankajGarg''. Hier kann überprüft werden, welches Ergebnis mit 'Set NOCount ON/OFF' zurückgegeben wird – Pankaj