2012-04-14 23 views
1

更新:私のコードは、ストアドプロシージャの誤植が原因で失敗したために正常に動作しています。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パラメータを完全に削除し、

int rowsAffected = cmd.ExecuteNonQuery(); 

result = rowsAffected == 1 ? 1 : 0; 

ストアドプロシージャ:かわりには、ExecuteNonQuery()メソッドの戻り値

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

.... '-1' –

+0

あなたはロールバックが発生する可能性があり、そのテーブル上の任意のトリガーを持っていますか?上記のストアドプロシージャの簡略化されたバージョンを実行すると、SQL Management Studioで何が得られますか?つまり、EXEC EmployeeUpdate 34、 'John John' – BluesRockAddict

+0

は、テーブルのトリガーがありません。 –

2

は、次

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

して以下

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

を交換しますNOCOUNT ONは、T-SQLによる行効果の数が

SET NOCOUNT OFFに戻されることはありません示している3210

SETは、T-SQLが返される によって行効果の数を意味します。

SPを変更した後も同じ

enter image description here enter image description here

+0

私はまだ同じ戻り値= 0 .... ergggg –

+0

を取得した後、デバッグするための他の方法はありますか? –

+0

はい、別の方法があります。 'データベース 'に行ってください。さて、 'SSMS'の' Stored-Proc'を実行してください。このように、 'EmployeeUpdate 1、' PankajGarg '。ここで 'Set NOCount ON/OFF'を使って返される実際の結果を確認することができます。 – Pankaj

関連する問題