使用SqlDataReader从TSQL输出子句获取错误消息

时间:2011-01-20 15:30:04

标签: tsql ado.net sqldatareader sqlcommand

我有以下SQL

INSERT INTO [dbo].[table1] ([val1], [val2]) 
OUTPUT INSERTED.* 
VALUES (@val1, @val2)

我使用SqlCommand.ExecuteReader()来获取一个读取输出行的SqlDataReader。当参数正确时,一切正常。

当表具有参数未满足的约束时,问题就开始了,例如:

ALTER TABLE [dbo].[table1]
ADD CONSTRAINT [chk_table1_distinct_values] 
CHECK (val1 <> val2)

如果我使用val1和val2的相同值执行命令,则读取器将以静默方式失败。我所能做的就是检查返回SqlDataReader.HasRows的{​​{1}}属性。

所以我的问题是如何从返回的false

中获得更具体的错误

2 个答案:

答案 0 :(得分:1)

您是否检查了Capture Stored Procedure print output in .NET

中的“正常”输出

从AdaTheDev复制:

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);
void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    // Do something with e.Message
}

答案 1 :(得分:0)

begin try..catch部分catch内添加raiserror