我有一个存储过程,错误提示“超时已过期”。
涉及的代码是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 中重写,不幸的是这不是一个选择!)
我认为你想得太多了。无意冒犯,但如果你使用 MSSQL,那么就像有人打开查询窗口并绑定数据库一样简单。这很容易测试。
我以前也遇到过同样的麻烦。我之前运行过没有超时的存储过程,通常会立即运行,但会静置过夜而不运行。结果发现另一名员工打开了查询窗口。关上窗户,噗的一声,它终于运行了。
检查一下,您会惊讶于表锁可以对您的应用程序执行什么操作。
我这样说是因为你说这个问题是间歇性的。它来了又走。我怀疑是表锁。无论是应用程序执行此操作,还是由另一个用户对数据库进行查询来执行此操作。如果不是其他用户,请检查以确保您的应用程序在每次使用数据库时都关闭与数据库的连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)