我正在从 C# 调用 SQL Server 存储过程,其中包含一个简单的 INSERT 语句。ExecuteNonQuery() 返回受语句 OK 影响的行数,除非没有更新,在这种情况下我得到 -1。
这对我来说没有多大意义;-1 行如何受到影响?
我正在从 C# 调用 SQL Server 存储过程,其中包含一个简单的 INSERT 语句。ExecuteNonQuery() 返回受语句 OK 影响的行数,除非没有更新,在这种情况下我得到 -1。
这对我来说没有多大意义;-1 行如何受到影响?
即使 SET NOCOUNT 为 ON,@@ROWCOUNT 函数也会更新。
因此,由于您处于关闭的死胡同NOCOUNT
,请尝试以下操作:
@@ROWCOUNT
与_ExecuteNonQuery
在您的 SP 结束时,执行SELECT @@ROWCOUNT
并使用ExecuteScalar
而不是ExecuteNonQuery
. 这将返回您想要的结果。
在使用具有插入/删除/更新查询的存储过程调用 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。