我需要捕获以下特定异常:
System.Data.OleDb.OleDbException被捕获ErrorCode = -2147467259
Message =“您向表格请求的更改未成功 因为他们会在索引中创建重复值,主键, 或关系。更改包含的字段或字段中的数据 重复数据,删除索引或重新定义索引以允许 重复条目,然后重试。“Source =”Microsoft JET数据库 引擎“StackTrace: 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult) 小时) 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS) dbParams,Object&的ExecuteReuslt) 在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) 在System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象&的ExecuteReuslt) 在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法) 在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
我不确定ErrorCode
是什么,但它看起来不可靠。
我可以依赖Message
跨平台相同吗?
我可以以某种方式使用堆栈跟踪中找到的OleDbHResult hr
值吗? (见https://stackoverflow.com/a/991660/327528)
对Message
和duplicate
这样的字词进行primary key
的文字搜索是唯一的解决方案吗?
答案 0 :(得分:7)
你是对的,ErrorCode(-2147467259 = 0x80004005 = E_FAIL)过于通用,依赖于该消息非常脆弱 - 例如考虑本地化。
我会查看OleDbException.Errors
集合,试图找到更具体的内容。
答案 1 :(得分:2)
OleDbException
的JET错误代码可以从以下网址找到:
OleDbError.SQLState
对于问题中提供的例外,3022
。
答案 2 :(得分:2)
答案 3 :(得分:-1)
try {
cmd.ExecuteNonQuery();
} catch (OleDbException ex) {
if (ex.ErrorCode == -2147467259) {
MessageBox.Show("Hi , yes");
}
}