【发布时间】:2022-01-09 20:09:25
【问题描述】:
我在 SQL Server 中有一个存储过程,只要遇到条件就会引发错误。为了捕获此错误并将其显示给用户,我使用
try
{
//code
}
catch (Exception e)
{
return BadRequest(e.Message);
}
这会捕获大多数情况,但另一方面,此过程有一些print 消息也会被此Exception 捕获。有没有办法捕获仅从 RAISERROR 引发的异常并忽略来自 SQL Server 的 print 消息?
【问题讨论】:
-
PRINT从不产生异常。可能发生的情况是,当引发具有高严重性的消息时,较早的低严重性PRINT消息会滚动到错误中。您应该能够通过专门捕获SqlException并使用Errors属性来区分和过滤这些。可以想象,您还可以通过将事件处理程序连接到SqlConnection.InfoMessage来先发制人地过滤它们(免责声明:未经测试,由于缓冲,这可能不会做任何事情)。 -
print来自 SQL Server 的消息不应生成异常,如果您仅使用 ADO.Net 对象(SqlConnection、SqlCommand等)则不会。因此,如果您遇到异常,则要么是使用这些对象将消息转换为异常的额外代码,要么是正在使用的其他一些库/堆栈执行此操作。在//code中我们都看不到。 -
您是否真的使用 RAISERROR 来立即“打印”消息?
标签: c# .net sql-server exception raiseerror