为什么ExecuteNonQuery返回0值,即使SQL Server存储过程返回1行受影响?

时间:2017-10-24 04:01:38

标签: c# asp.net sql-server

我有一个更新表的SQL Server存储过程。

这是我的存储过程

CREATE PROCEDURE [dbo].[usp_ExampleUpdate]
    (@iID INT,
     @sCodeName VARCHAR(MAX)
    )
AS
BEGIN
    UPDATE dbo.Example
    SET CodeName = @sCodeName
    WHERE ID = @iID
END

当我在SQL Server中执行此存储过程时,它返回“1行受影响”,并更新数据。但是,当我尝试使用ExecuteNonQuery从ASP.NET MVC执行此存储过程时,它返回0.

以下是我的代码示例

public bool UpdateExample(SqlTransaction p_oTrans, int ID, string CodeName)
{
    try
    {
        int iRowAffected = SqlHelper.ExecuteNonQuery(p_oTrans, "usp_ExampleUpdate", ID, CodeName);

         return (iRowAffected > 0);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

iRowAffected此处始终返回0,即使存储过程已成功执行。

我已经阅读了关于this的内容,但我仍然没有得到它,为什么我总是得到0。

1 个答案:

答案 0 :(得分:0)

MSDN

  

对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。 对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。

由于您正在执行SP而不是这3个DML语句中的一个,我得出的结论是它按设计工作