我正试图从ADO中捕获“超时过期”错误。
发生超时时,ADO返回:
Number: 0x80040E31 (DB_E_ABORTLIMITREACHED in oledberr.h)
SQLState: HYT00
NativeError: 0
零NativeError
是有道理的,因为超时不是数据库引擎(即SQL Server)的函数,而是ADO的内部超时机制。
Number
(即COM hresult)看起来很有用,但definition of DB_E_ABORTLIMITREACHED
中的oledberr.h
说:
执行已停止,因为已达到资源限制。没有返回任何结果。
此错误可能适用于“超时过期”(某些可能是服务器端)之外的内容,例如限制的调控器:
并停止查询。
最后一个有用的部分是SQLState
,它是一个与数据库无关的错误代码系统。很遗憾,唯一的reference for SQLState error codes i can find没有提到HYT00
。
怎么办? 怎么办?
注意:我不能相信
0x80040E31 (DB_E_ABORTLIMITREACHED)
表示“超时已过期”,不再是我信任的
0x80004005 (E_UNSPECIFIED_ERROR)
表示“事务已在锁定资源上与另一个进程陷入僵局,并被选为死锁受害者”。
我的伪问题变成:有没有人有关于SQLState“HYT000
”的含义的文档?
我的真正问题仍然存在:如何专门捕获ADO抛出的ADO 超时过期异常?
喜欢开发人员试图“做正确的事情”的问题,但没有人知道如何做正确的事情。还要喜欢谷歌搜索DB_E_ABORTLIMITREACHED
,这个问题是#9,MSDN无处可寻。
来自OLEdb ICommand.Execute reference:
DB_E_ABORTLIMITREACHED
执行已中止,因为已达到资源限制。例如,查询超时。没有返回任何结果。
“例如”,意思不是详尽的清单。
找到它。答案用作答案。
答案 0 :(得分:2)
您可以安全地使用HYT00
来表示“超时已过期”。以下内容来自Microsoft的SQLSTATEs参考。它提到了HYT00
SQLSTATE:
以下SQLSTATE指示运行时错误或警告,并且是编程逻辑基础的良好候选者。但是,并不能保证所有司机都会退回。
01004(数据被截断)
01S02(选项值已更改)
HY008(取消操作)
HYC00(未实施可选功能)
HYT00(超时已到期)
然后链接到Appendix A: ODBC Error Codes of the ODBC Programmer's Reference,其中记录了SQLSTATE
值:
HYT00
超时已过期,有趣的是HYT01
连接超时已过期因此,您可以使用HYT00进行“ Timeout expired ”。
答案 1 :(得分:0)