使用 SqlDataReader 从 TSQL 输出子句获取错误消息
我有以下 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 的相同值执行命令,则读取器会默默失败。我所能做的就是检查返回 false
的 SqlDataReader.HasRows
属性。
所以我的问题是如何从返回的 SqlDataReader 中获取更具体的错误?
I have the following SQL
INSERT INTO [dbo].[table1] ([val1], [val2])
OUTPUT INSERTED.*
VALUES (@val1, @val2)
I use SqlCommand.ExecuteReader()
to get a SqlDataReader
that reads the outputed row. It all works fine when the parameters are correct.
The problems begin when the table has a constraint not met by the parameters, for example:
ALTER TABLE [dbo].[table1]
ADD CONSTRAINT [chk_table1_distinct_values]
CHECK (val1 <> val2)
If I execute the command with the the same value for val1 and val2 the reader fails silently. All I can do is to check the SqlDataReader.HasRows
property, that returns false
.
So my question is how can I get a more specific error from the returned SqlDataReader
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否检查过“正常”输出,如在.NET中捕获存储过程打印输出
复制自 AdaTheDev:
Have you inspected the "normal" output like in Capture Stored Procedure print output in .NET
copied from AdaTheDev:
添加
begin try..catch
并在catch
部分中添加raiserror
。add
begin try..catch
and within thecatch
section,raiserror
.