RAISERROR-如何区分SqlException?

Use*_*ser 9 c# wcf sql-server-2005 sqlexception raiserror

我有3-4个存储过程 - 如果需要我可以修改 - RAISERROR用于通知我的应用程序在数据库端的一些致命错误.其中一些存储过程是从C#端ExecuteNonQuery执行的,而其他存储过程是用ExecuteReader.目前,我将这些命令包装在一个try { ... } catch (SqlException ThisSqlException) { ... }块中,但问题是这个异常将至少抛出两个我必须单独处理的场景:

1)连接本身的错误,或者出现故障或类型不匹配的参数; 和

2)我RAISERROR明确使用时出现的错误.

由于这是一个WCF应用程序,我必须根据异常的性质(无论是否由于RAISERROR命令)返回客户端应用程序的不同反馈.那么,我怎样才能区分这两种情况呢?

Jef*_*dge 14

RAISERROR命令包含一个msg_id参数,该参数可用于标识错误类型.该值通过SqlException.Number属性提供给应用程序.通过这种方式,您可以识别由存储过程引发的任何异常,该异常包括系统中定义的自定义错误消息.

如果RAISERROR使用文本字符串错误消息调用,Number则将为50000.


mar*_*c_s 5

当您捕获 时SqlException,您可以检查其Errors包含详细错误消息的集合。

这些SqlError对象包含非常详细的信息——包括错误代码、消息等等。

使用该信息,您应该能够轻松地区分基于连接的错误或您自己引发的错误。