【发布时间】:2009-05-22 17:06:20
【问题描述】:
我有一个存储过程出错,显示“超时已过期”。
涉及的代码是ADO/VB6。
存储过程本身没有问题,可以在查询窗口中运行,不到一秒。
用于获取连接等的代码也是模块化的,并且在一个巨大的应用程序中使用。超时仅在这个地方发生,在一个特定的数据库上。
无论是否在调试中运行 VB6 代码,每次尝试数百次都会重现错误,然后突然间一切都会神奇地重新开始工作。然后在未来的某个时间,同样的问题会再次出现。
我不确定要放多少代码,这没什么复杂的;基本上是;
Set adoCommandObject.ActiveConnection = ...{open ADODB.Connection object}
Set rs = CreateObject("ADODB.Recordset")
Call rs.Open(adoCommandObject, , adOpenForwardOnly, adLockReadOnly)'Timeout occurs here
我一直在探查器中观察,但没有给出任何线索,除了偶尔看到在 sp 运行之前和之后发生的“SET NO_BROWSETABLE ON”/“SET NO_BROWSETABLE OFF”语句。
我已经在网上搜索过,但无法找到任何令人满意的帮助;我愿意在这一点上尝试任何事情(除了在 .NET 中重写,不幸的是这不是一个选项!)
【问题讨论】:
-
几个问题:你是在很长一段时间后超时还是立即超时?如果是很长的时间,探查器是否同意命令的持续时间很长?
-
Get Timeout 在一段时间后过期 - 30 秒左右 - 我猜超时设置是什么,可能是默认设置。是的,探查器同意 - 在 VB6 代码中引发错误后,您会在探查器中看到 sp 完成,并注明持续时间长。
-
您是否确定了解决方案,因为我处于类似情况!
-
不是真的,我没有亲自参与,但我相信问题仍然偶尔会出现。似乎记得一个开发人员提到了一些关于“return”语句的内容/或者他们删除了一个“return 0”/添加了一个效果?值得一试。祝你好运-如果您找到解决方案,请发布。 PS类似;-)