如何捕获特定的OleDbException



我需要捕获以下特定异常:

System.Data.OleDb.OleDbException被捕获ErrorCode=-217467259
消息="您请求对表的更改未成功因为它们会在索引、主键、和,或关系。更改包含的字段中的数据重复数据、删除索引或重新定义索引以允许重复条目,然后重试。"Source="Microsoft JET数据库引擎"StackTrace:在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult小时)位于System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMSdbParams,对象&executeResult)位于System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecutedCommand(CommandBehavior行为,对象&executeResult)位于System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior行为,字符串方法)在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

我不确定ErrorCode是什么,但它看起来不可靠。

我可以相信Message在不同平台上是相同的吗?

我可以以某种方式使用在堆栈跟踪中找到的OleDbHResult hr值吗?(请参见https://stackoverflow.com/a/991660/327528)

唯一的解决方案是在Message中搜索像duplicateprimary key这样的单词吗?

您说得对,错误代码(-2147467259=0x80004005=E_FAIL)过于通用,依赖消息非常脆弱-例如,考虑本地化。

我会查看OleDbException.Errors集合,试图找到更具体的内容。

OleDbException的JET错误代码可以从以下位置找到:

OleDbError.SQLState

对于问题中提供的异常,其为CCD_ 9。

您可以尝试对OleDbException.Errors集合中的每个错误使用SQLState属性

找到此引用:SQL状态错误代码<-不再工作
更新参考:SQL错误代码

try {
cmd.ExecuteNonQuery();
} catch (OleDbException ex) {
if (ex.ErrorCode == -2147467259) {
MessageBox.Show("Hi , yes");
}
}

相关内容

  • 没有找到相关文章

最新更新