在经典 ASP 脚本中,我有一个执行存储过程的 sql 语句:
sql="exec my_stored_proc"
然后我尝试用结果填充 ADO Recordset 对象并循环遍历记录集。
存储过程本身正在填充一个虚拟表,过程的最后一行返回结果:
select tableName, subTable, FieldLabel, total, FieldOrder from @AdmissionsTable
当直接从 SQL 管理工作室执行时,我得到了结果,但是当从 ASP 页面执行时,这一行:
do while not rs.eof
导致错误“对象关闭时不允许操作”。
我知道这不是因为我正在尝试执行存储过程,而是因为我针对另一个存储过程对其进行了测试,并且能够将结果放入 rs 对象中。
是因为我使用的是虚拟表吗?或者是其他东西?
额外代码:
分配 sql 字符串后,我打开连接,设置 rs 对象,然后执行查询:
conn.Open strConnection
Set rs = server.createobject("ADODB.Recordset")
rs.open sql, conn
然后是错误行:
do while not rs.eof
进一步更新:
在 rs.open 行之后,我将一些调试代码添加到 response.write “RS Populated”,然后执行该行。但是在那之后错误仍然直接出现,所以我猜这意味着RS正在以某种方式立即关闭。不知道为什么。
进一步更新:
我至少已经隔离了这个问题。err 对象返回“查询超时”作为错误,rs.ActiveConnection.CommandTimeout 返回“30”作为我的超时值。
查询很大,运行至少需要 60 秒,所以我尝试设置 rs.ActiveConnection.CommandTimeout = 120,但它仍然失败并且 - 最令人抓狂的是 - 它仍然返回“30”作为超时值。
如果 rs.ActiveConnection.CommandTimeout = 120 不能增加超时,我怎样才能得到这个值?