如何捕获可能随SQL Server升级而更改的SQL错误
本文关键字:SQL 错误 Server 何捕获 | 更新日期: 2023-09-27 18:00:26
我做了一个捕获,如果抛出特定的sql server错误,代码可以忽略并继续执行。一位同事说,我捕获的错误消息是从sql抛出的,当我们升级到2008时,它可能会更改。他说我的解决方案今天会起作用,但这是一个薄弱的解决方案。所以,我的问题是……如果错误可能取决于SQL server版本,我应该如何捕捉和处理从SQL server抛出的错误。ie(2005、2008或更新版本)?有什么关于如何使捕获效果更好的想法吗?
我的代码
string sqlError = "The INSERT statement conflicted with the FOREIGN KEY constraint Table1. The conflict occurred in database Work1, table Table2.";
catch (Exception oExp)
{
//This check will allow the specific error to continue without getting caught.
if (oExp.Message.Contains(Constants.sqlError) == false)
{
throw oExp;
}
}
正如评论中所指出的,这种是可以避免的,所以应该做正确的事情,并确保它不会首先发生。
正如你所推测的,使用静态文本是一件坏事。当您考虑到这些消息将根据安装SQL Server的语言或用户登录的身份(因为SQL消息是区域设置敏感的)而更改时,无论升级级别如何,情况更是如此。
此外。。。我不太明白为什么即使抛出了这个错误,你也要继续,因为听起来它会使你的数据处于不一致的状态,所以我会首先检查你是否做了正确的事情。但是我不知道你的申请。。。
所以说了这么多警告。。。如果无法避免这种情况(无论出于何种原因-不包括懒惰:-),您不应该捕获通用Exception
,而应该捕获SqlException
,其中包括State
和Number
属性,您应该能够逐字使用这些属性。