我有大约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/

10-13 08:17