1

更新:失敗した理由であるストアドプロシージャにタイプミスがあったため、コードは期待どおりに動作しています。


エラーが発生していないため、これを修正する理由や方法がわからないようです。戻り値が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
4

2 に答える 2

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による行数の影響が返されることを意味します。

ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2012-04-14T17:35:28.543 に答える
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
于 2012-04-14T04:37:24.387 に答える