我从C#调用SQL Server存储过程,包含一个简单的INSERT语句。 ExecuteNonQuery()返回受语句OK影响的行数,除非没有更新,在这种情况下我得到-1。
这对我来说没有多大意义; -1行怎么会受到影响?
答案 0 :(得分:1)
即使SET NOCOUNT为ON,也会更新@@ ROWCOUNT函数。
所以,既然你在关闭NOCOUNT
时处于死胡同,试试这个:
将@@ROWCOUNT
与ExecuteNonQuery
在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 即可。