我想知道是否存在同时使用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将是杀死)。