Ian*_*oyd 6 sql-server timeout exception-handling ado
我正在尝试从 ADO 捕获“超时过期”错误。
当超时发生时,ADO 返回:
Number: 0x80040E31 (DB_E_ABORTLIMITREACHED in oledberr.h)
SQLState: HYT00
NativeError: 0
Run Code Online (Sandbox Code Playgroud)
在NativeError零有道理的,因为超时不在数据库引擎(即SQL Server)的函数,但ADO的内部超时机制。
在Number(即COM HRESULT)看起来有用,但是定义DB_E_ABORTLIMITREACHED中oledberr.h说:
由于达到资源限制,执行停止。没有返回任何结果。
此错误可能适用于除“超时过期”(某些可能是服务器端)之外的其他内容,例如限制的调控器:
并停止查询。
最后一个有用的部分是SQLState,它是一个独立于数据库的错误代码系统。不幸的是,我能找到的 SQLState 错误代码的唯一参考没有提到HYT00.
该怎么办?做什么?
注意:我不能相信
0x80040E31 (DB_E_ABORTLIMITREACHED)
Run Code Online (Sandbox Code Playgroud)
意思是“超时已过期”,超出了我的信任
0x80004005 (E_UNSPECIFIED_ERROR)
Run Code Online (Sandbox Code Playgroud)
意思是“事务与另一个进程在锁定资源上死锁,并已被选为死锁受害者”。
我的伪问题变成了:有人有关于 SQLState " HYT000" 含义的文档吗?
我真正的问题仍然存在:我如何专门捕获 ADO抛出的 ADO超时过期异常?
必须喜欢开发人员试图“做正确的事”的问题,但没有人知道如何做正确的事。还必须喜欢谷歌搜索DB_E_ABORTLIMITREACHED,这个问题是#9,找不到 MSDN。
DB_E_ABORTLIMITREACHED
由于已达到资源限制,执行已中止。例如,查询超时。没有返回任何结果。
“例如”,意思是不是一个详尽的列表。
找到了。答案作为答案应用。
您可以放心地使用它HYT00来表示“超时已过期”。以下内容来自微软的SQLSTATEs参考。它提到了HYT00SQLSTATE:
以下 SQLSTATE 指示运行时错误或警告,并且是作为编程逻辑基础的良好候选者。但是,并不能保证所有司机都会归还它们。
01004(数据被截断)
01S02(选项值已更改)
HY008(操作取消)
HYC00(可选功能未实现)
HYT00(超时已到)
然后链接到ODBC 程序员参考 的附录 A:ODBC 错误代码,其中记录了这些SQLSTATE值:
HYT00超时过期了,有趣的是HYT01连接超时已过期因此,您可以使用 HYT00 来表示“超时已过期”。
| 归档时间: |
|
| 查看次数: |
10929 次 |
| 最近记录: |