我有大约3-4个存储过程(可以根据需要进行修改),它们使用RAISERROR
通知我的应用程序数据库方面的一些致命错误。这些存储过程中的一些是从C#端使用ExecuteNonQuery
执行的,而其他一些则是使用ExecuteReader
执行的。目前,我将这些命令包装在try { ... } catch (SqlException ThisSqlException) { ... }
块中,但是问题是,在至少两个我必须分别处理的场景中会抛出此异常:
1)连接本身错误,或者参数错误或类型不匹配;和
2)每当我显式使用RAISERROR
时,都会发生错误。
由于这是WCF应用程序,因此我必须根据异常的性质(无论是否由于RAISERROR
命令而导致)将不同的反馈返回给客户端应用程序。那么,我该如何区分这两种情况?
最佳答案
RAISERROR
command包含msg_id参数,该参数可用于标识错误的类型。该值通过 SqlException.Number
属性提供给应用程序。这样,您可以识别存储过程引发的任何异常,其中包括系统中定义的自定义错误消息。
如果使用文本字符串错误消息调用RAISERROR
,则Number
将为50000。
关于c# - RAISERROR―如何与SqlException区分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6509209/