ExecuteNonQuery静默失败,没有任何错误

时间:2012-04-14 04:27:01

标签: c# asp.net sql-server-2008 ado.net

更新:我的代码按预期行为,因为存储过程中存在错误导致其失败。


我似乎无法弄清楚为什么或如何解决这个问题,因为我没有得到任何错误,我得到的是返回值为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

2 个答案:

答案 0 :(得分: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

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