2012-04-14 89 views
1

UPDATE:我的代碼表現得如預期的那樣,存儲過程中存在一個錯誤,這是它失敗的原因。ExecuteNonQuery靜默失敗,沒有任何錯誤


我似乎無法找出原因或如何解決這個問題,因爲我沒有得到什麼,我得到任何錯誤的返回值是0,這意味着失敗。

這裏是我的.NET代碼:

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 

我的存儲過程:

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 

所以,如果我剛剛從SQL Server Management Studio中執行存儲過程,它成功地更新我行不任何錯誤

EXEC EmployeeUpdate 34,'John John' 

Return Value = 1 

回答

1

我會建議完全刪除returnValue參數,只是使用()的ExecuteNonQuery的返回值的方法,而不是:

int rowsAffected = cmd.ExecuteNonQuery(); 

result = rowsAffected == 1 ? 1 : 0; 

存儲過程:

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

還是修改後的SP一樣....'-1' – 2012-04-14 04:40:53

+0

你對這個表可能導致回滾的觸發器?如果您運行上述存儲過程的簡化版本,您會在SQL Management Studio中獲得什麼?即EXEC EmployeeUpdate 34,'約翰約翰' – BluesRockAddict 2012-04-14 04:43:30

+0

沒有任何觸發器表上只是仔細檢查。 – 2012-04-14 04:44:51

2

更換以下

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

隨着繼

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

SET NOCOUNT ON是表示由T-SQL該號碼的行效果將 不會返回

SET NOCOUNT OFF意味着數目的行通過效果 T-SQL將被返回。

enter image description here enter image description here

+0

後我改變我仍然得到相同的returnvalue = 0 .... ergggg – 2012-04-14 18:27:14

+0

是否有任何其他方式來調試? – 2012-04-14 18:30:11

+0

是的,你有另一種方式。請到'數據庫'。現在,執行'SSMS'中的'Stored-Proc'。像這樣,「EmployeeUpdate 1,'PankajGarg''。在這裏可以檢查使用'設置NOCount ON/OFF'返回的實際結果是什麼 – Pankaj 2012-04-15 02:28:25