【问题标题】:Get an error message from TSQL output clause with SqlDataReader使用 SqlDataReader 从 TSQL 输出子句获取错误消息
【发布时间】:2011-06-12 13:12:49
【问题描述】:

我有以下 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 属性,它返回false

所以我的问题是如何从返回的SqlDataReader 中获得更具体的错误?

【问题讨论】:

    标签: tsql ado.net sqldatareader sqlcommand


    【解决方案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
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这可以作为 SqlCommand.CommandText = "TRY ... CATCH .." 和 ExecuteReader() 执行吗?闻起来更像是一个存储过程...
      • 没有。我的意思是使用 sproc 中的 T-SQL 和 raiserror 来实现,你可以从 C# 异常中得到错误消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2021-08-20
      相关资源
      最近更新 更多