在C#中,是否可以通过SQL异常获得更好的粒度?
我知道很多问题都可能出错,但是我想以不同的方式处理某些情况,并且解析Error消息似乎不是很优雅.
另外,错误消息是由框架创建的还是特定于数据库的?
例如,如果我在INSERT上遇到主键冲突,则错误消息将始终为:
违反主键约束’PK_tblProduct’.无法在对象“ dbo.tblProduct”中插入重复的密钥.
还是特定于SQLServer的.
更新资料
我看起来好像在寻找错误号,知道在哪里可以得到各种错误号?
我可以用一个快速的谷歌做的最好的是:
18456:登录失败
18488:密码已过期
解决方法:
如果捕获到SqlException
,则应该可以访问.Number
,该错误码为您提供SQL错误号;这可能是您最好的方法……(对于非致命错误,您也可以从InfoMessage事件中获得相同的信息).
当然,这不会在表之间进行区分-您可能会争辩说,如果需要此粒度级别,则应首先检查(在可序列化的隔离级别中,理想情况下使用UPDLOCK),如果存在冲突数据,则会引发自己的错误.