我想知道是否存在同时使用SQL raiserror和在C#中检索所选结果的方法。当发生ExecuteReader()时,C#中的raiserror将引发异常,但是我仍然想使用读取器捕获返回的任何数据。

下面是一个简化的示例。如果不可能,我将在一般情况下使用raiserror,在特定情况下使用select

if (some-error)
begin
    select  @Message = 'ERROR: script made a booboo',
            @State = 'State Info'
    raiserror (@Messsage, 16, 1)
    goto exit_sp
end

exit_sp:
    select  @Message 'Message', @State 'State'

最佳答案

如果将严重性降低到10或更低(从内存中降低),它不会引发异常,但是可以通过InfoMessage event on the connection使用。但是请注意,由于TDS的工作方式,您应确保在所有结果的末尾均Read()等。例如,如果您有多个select,然后是一个raiserror,并且您仅在删除数据读取器之前先读取了第一个select,则有可能看不到该消息(TDS将是杀死)。

10-08 13:14