我在SQL Server中有一个存储过程,每当遇到条件时就会抛出错误。为了捕捉这个错误并将其显示给用户,我使用
try
{
//code
}
catch (Exception e)
{
return BadRequest(e.Message);
}
这捕获了大多数情况,但另一方面,此过程有一些print
消息也被此Exception
捕获。是否有一种方法可以捕获仅从RAISERROR
抛出的异常并忽略来自SQL Server的此print
消息?
在命令执行期间生成的所有信息和错误消息都会被缓冲,并且在捕获SqlException时可用。Message属性包括所有信息消息的文本(打印严重性小于11的语句和错误(以及导致异常的警告/错误。
要忽略信息消息,请使用SqlException Errors集合,并仅处理严重性(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());
}