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

发布于 2024-10-13 04:43:10 字数 552 浏览 6 评论 0原文

我有以下 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 的相同值执行命令,则读取器会默默失败。我所能做的就是检查返回 falseSqlDataReader.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱要勇敢去追 2024-10-20 04:43:10

您是否检查过“正常”输出,如在.NET中捕获存储过程打印输出

复制自 AdaTheDev:

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

Have you inspected the "normal" output like in Capture Stored Procedure print output in .NET

copied from AdaTheDev:

myConnection.InfoMessage += new SqlInfoMessageEventHandler(myConnection_InfoMessage);
void myConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    // Do something with e.Message
}
仅一夜美梦 2024-10-20 04:43:10

添加 begin try..catch 并在 catch 部分中添加 raiserror

add begin try..catch and within the catch section, raiserror.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文