我试图捕获来自 ADO 的“超时已过期”错误。
当超时发生时,ADO 返回:
Number: 0x80040E31 (DB_E_ABORTLIMITREACHED in oledberr.h)
SQLState: HYT00
NativeError: 0
The NativeError
为零是有道理的,因为超时不是数据库引擎(即 SQL Server)的函数,而是 ADO 内部超时机制的函数。
The Number
(即 COM hresult)看起来很有用,但是的定义DB_E_ABORTLIMITREACHED https://web.archive.org/web/20110921082938/http://blogs.msdn.com:80/b/joshpoley/archive/2008/01/04/errors-004-facility-itf.aspx in oledberr.h http://examples.oreilly.com/9780735619616/cd_contents/devtools/include/oledberr.h says:
由于达到资源限制,执行已停止。没有返回结果。
此错误可能适用于除“超时已过“(一些可能是服务器端的),例如限制的调控器:
并停止查询。
最后有用的部分是SQLState
,这是一个独立于数据库的错误代码系统。不幸的是唯一我可以找到的 SQLState 错误代码参考 https://www.ibm.com/docs/en/products?topic=/com.ibm.db2.udb.doc/core/r0sttmsg.htm没有提及HYT00
.
该怎么办?
做什么呢?
Note:我不能相信
0x80040E31 (DB_E_ABORTLIMITREACHED)
意思是“超时已过“,超出了我的信任范围
0x80004005 (E_UNSPECIFIED_ERROR)
意思是“事务在锁资源上与另一个进程发生死锁,并已被选为死锁受害者".
我的伪问题变成:有人有关于 SQLState 的文档吗?HYT000
" means?
我真正的问题仍然是:我如何专门捕获 ADO超时已过ADO 抛出异常?
必须喜欢开发人员试图解决的问题“做正确的事”,但没有人知道how做正确的事。也一定喜欢谷歌搜索DB_E_ABORTLIMITREACHED
这个问题是#9,MSDN 上找不到。
Update 3
来自OLEDb ICommand.执行参考 https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ms718095%28v=vs.85%29:
DB_E_ABORTLIMITREACHED
由于已达到资源限制,执行已中止。例如,查询超时。没有返回任何结果。
"例如”,这意味着不是详尽的列表。
更新三
找到了。答案作为答案应用。