经典ASP,ADO,记录集不从存储过程填充

时间:2013-08-01 14:51:05

标签: sql asp-classic ado

在Classic 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正在立即关闭。不知道为什么。

进一步更新:

我至少已经解决了这个问题。错误对象返回“查询超时”作为错误,rs.ActiveConnection.CommandTimeout返回“30”作为我的超时值。

查询很大并且至少需要60秒才能运行,所以我尝试设置rs.ActiveConnection.CommandTimeout = 120,但它仍然失败 - 最令人抓狂 - 它仍然返回“30”作为超时值。

如果rs.ActiveConnection.CommandTimeout = 120无法增加超时,我怎样才能获得该值?

1 个答案:

答案 0 :(得分:0)

问题解决了。我必须在连接级别设置CommandTimeout属性:

conn.CommandTimeout=120

现在可行。