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 回答