1

我正在从 C# 调用 SQL Server 存储过程,其中包含一个简单的 INSERT 语句。ExecuteNonQuery() 返回受语句 OK 影响的行数,除非没有更新,在这种情况下我得到 -1。

这对我来说没有多大意义;-1 行如何受到影响?

4

2 回答 2

1

即使 SET NOCOUNT 为 ON,@@ROWCOUNT 函数也会更新。

资源

因此,由于您处于关闭的死胡同NOCOUNT,请尝试以下操作:

@@ROWCOUNT与_ExecuteNonQuery

在您的 SP 结束时,执行SELECT @@ROWCOUNT并使用ExecuteScalar而不是ExecuteNonQuery. 这将返回您想要的结果。

于 2013-02-13T02:33:41.927 回答
1

在使用具有插入/删除/更新查询的存储过程调用 ExecuteNonQuery() 后,您可以获得 -1。如果存储过程不调用任何查询(插入/更新/删除),就会发生这种情况。这是一个示例,可以帮助您理解这一点。

存储过程- MySQL

DELIMITER $$ DROP PROCEDURE IF EXISTS sp_DML $$ CREATE PROCEDURE sp_DML
(
P_Operation varchar(50)
) BEGIN

  if(P_Operation='Insert')
    /*  Insert Statment*/
  end if;

  if(P_Operation='Update')
    /*  Update Statment*/
    end if;
  if(P_Operation='Delete')
    /*Delete Statment*/
    end if;          

结束$$

如果您使用ExecuteNonQuery();调用此 SP ;并将参数P_Operation 作为 'NoOpeartion'传递,它不满足写入存储过程的任何条件,那么它将始终返回-1

于 2016-07-11T11:29:57.833 回答