SqlCommand.ExecuteNonQuery() 执行存储过程不返回受影响行数
今天遇到一个平时很少碰到的问题,现记录如下:
在数据库里有一个执行插入或更新(已存在)操作的存储过程Sp_CreateOrUpdateXXX,
在程序中通过 SqlCommand.ExecuteNonQuery() 执行过程时,没有返回受影响行数。
通过检查存储过程发现,在存储过程的代码首行多了一句sql:SET NOCOUNT ON;
删除该句代码后,返回了受影响行数。
资料:
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transct-SQL 语句影响的行数)。
如果存储过程中包含的一些语句并不返回许多实际的数据,则给设置由于大量减少了网路流量,因此可以显著提高性能。
当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。