C# C语言中SQL`raiserror`与`select`的组合

C# C语言中SQL`raiserror`与`select`的组合,c#,sql,raiserror,executereader,C#,Sql,Raiserror,Executereader,我想知道是否有一种方法可以同时使用SQL raiserror和在C中检索所选结果。当raiserror发生时,C中的ExecuteReader将引发异常,但我仍然希望使用读取器捕获返回的任何数据 下面是一个简化的例子。如果这是不可能的,我将使用raiserror为一般情况,并选择为特定情况 if (some-error) begin select @Message = 'ERROR: script made a booboo', @State = 'State

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

下面是一个简化的例子。如果这是不可能的,我将使用raiserror为一般情况,并选择为特定情况

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提供。但是,请注意,由于TDS的工作方式,您应该确保在所有结果的末尾阅读etc;例如,如果您有多个选择,然后出现一个raiserror,并且您在删除数据读取器之前只读取了第一个选择,那么您可能看不到TDS将被终止的消息