ExecuteNonQuery()返回-1

时间:2013-02-13 01:03:45

标签: sql sql-server-2008

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

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

2 个答案:

答案 0 :(得分:1)

  

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

Source

所以,既然你在关闭NOCOUNT时处于死胡同,试试这个:

@@ROWCOUNTExecuteNonQuery

一起使用

在SP结束时,请执行SELECT @@ROWCOUNT并使用ExecuteScalar代替ExecuteNonQuery。这将返回您想要的结果。

答案 1 :(得分:1)

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

StoredProcedure - MySQL

DELIMITER $$ DROP PROCEDURE如果EXISTS sp_DML $$ 创建程序sp_DML
    (
       P_Operation varchar(50)
    ) 开始

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

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

END $$

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