从批处理SQL命令(SQL Server)检索“输出消息”

时间:2008-11-18 19:11:20

标签: c# sql-server ado.net

我正在针对SQL Server在一个批处理中执行多个离散查询。例如:

update tableX set colA = 'freedom';

select lastName from customers;

insert into tableY (a,b,c) values (x,y,z);

现在,我想在DataSet中捕获结果(来自select语句),这很容易做到......但是我如何从该命令捕获“meta”响应,类似于Query Analyzer / SQL的方式当Mgt Studio显示“消息”选项卡并显示类似于:

的内容时,它会执行
(1 Row affected)
(2 Rows Updated)

3 个答案:

答案 0 :(得分:5)

查看SQL连接事件。我认为这就是你所追求的: http://msdn.microsoft.com/en-us/library/a0hee08w.aspx

答案 1 :(得分:3)

我的建议是使用@@ rowcount变量。通常,当我执行这些命令时,如果我想捕获潜在错误和受影响的行,我会这样做

declare @rowsAffected int, @error int

select * from sometable
     select @rowsAffected = @@rowcount, @error = @@error

if @@error <> 0 goto errorCleanup

答案 2 :(得分:1)

Nick建议@@ROWCOUNT是正确的 - 事实上,作为例行事项,我总是使用SET NOCOUNT ON,它具有(小)性能优势 - 但更重要的是,这个细节是一个实现细节 - 所以你的代码不应该关心...

如果要返回值(例如更新的行数),请使用以下任意一个:

  • 返回值
  • 输出参数
  • SELECT语句

最后一个开销最多