使用C#和ADO.NET设置NOCOUNT并读取消息
使用C#和ADO.NET设置NOCOUNT并读取消息,c#,asp.net,sql,sql-server,ado.net,C#,Asp.net,Sql,Sql Server,Ado.net,SET-NOCOUNT ON将停止显示受Transact-SQL语句或存储过程影响的行数计数的消息作为结果集的一部分返回 a) 如何使用C#和ADO.NET读取这些消息(我假设读取这些消息的C#代码是相同的,无论T-SQL语句是在存储过程、批处理还是…)中执行的 b) 假设存储过程包含多个语句,您的C代码如何识别特定消息引用的SQL语句 谢谢看看问题和答案。如果不在TSQL中添加一些捕获@@rowcount并以某种方式输出它的代码(如可以从中读取的结果集),则无法执行上面的(b) 存储过程
SET-NOCOUNT ON将停止显示受Transact-SQL语句或存储过程影响的行数计数的消息作为结果集的一部分返回
a) 如何使用C#和ADO.NET读取这些消息(我假设读取这些消息的C#代码是相同的,无论T-SQL语句是在存储过程、批处理还是…)中执行的
b) 假设存储过程包含多个语句,您的C代码如何识别特定消息引用的SQL语句
谢谢看看问题和答案。如果不在TSQL中添加一些捕获@@rowcount并以某种方式输出它的代码(如可以从中读取的结果集),则无法执行上面的(b) 存储过程中的一个选项是包含将传回语句计数的变量。您可以使用所需的输出参数创建过程
FIRST SQL HERE
@FirstSQLCount = @@ROWCOUNT
SECOND SQL HERE
@SecondSQLCount = @@ROWCOUNT
信息性消息(如受影响的行计数信息)通过事件在ADO.Net中报告。向事件添加一个委托,并在服务器发送信息消息(即严重性低于10的任何错误消息)时调用该委托
无法将信息性消息(如受影响的计数信息)与源关联。你必须根据逻辑知识来做,并且理解第一条消息指的是第一次更新,第二条消息指的是第二次更新,等等
依赖客户端中受影响的行数通常是一种不好的做法。当SET NOCOUNT ON打开时,ORM层(如NHibernate和ADO.Net数据集)会出现许多问题,这表明这种做法有多大问题。不要依赖它。最佳做法是
不计数
()
- 加载数据表时,请使用.Count李>
- 使用输出参数向后传递@@ROWCOUNT(或作为数据集)