-1

我在 SQL Server 中有一个存储过程,只要遇到条件就会引发错误。为了捕获此错误并将其显示给用户,我使用

try 
{
   //code
} 
catch (Exception e)
{
   return BadRequest(e.Message);
}

这可以捕获大多数情况,但另一方面,此过程有一些print消息也会被 this 捕获Exception。有没有办法捕获仅从 SQL Server 引发的异常RAISERROR并忽略print来自 SQL Server 的此消息?

4

1 回答 1

2

在命令执行期间生成的所有信息和错误消息都被缓冲并在捕获到SqlException时可用。Message 属性包括所有信息消息的文本(打印语句和严重性小于 11 的错误)以及导致异常的警告/错误。

要忽略信息消息,请使用 SqlException 错误集合并仅处理严重性(SqlError.Class 属性)为 11 或更高的那些:

catch (SqlException e)
{
   var sb = new StringBuilder();
   foreach(var error in e.Errors)
   {
       if(error.Class > 10) sb.AppendLine(error.message);
   }
   return BadRequest(sb.ToString());
}
于 2021-12-03T13:56:40.730 回答