经典ASP错误:关闭对象时不允许操作

时间:2012-10-09 20:01:35

标签: asp-classic vbscript adodb

我已经对这个问题的其他一些回复进行了巡视并实施了代码,但我仍然没有运气。我仍然得到错误。

    If ((bReport And bIsDate And CheckPermissions("lotsales")) Or Request.QueryString("report")) Then
    OpenDB
    Dim oRs, sSQL, sSQL2, iCancellations, iSales, sDate, sInitDate, sEndDate, iPhaseID, iPhaseNumber, rowCount

    sInitDate = Request("startDate")
    sEndDate = Request("endDate")
    sSQL = "sp_get_lot_sales_test '" & sInitDate & "', '" & sEndDate & "', " & sPhase & ", '" & sReportView & "'"

    'response.write vbNewLine & "<!-- sql: " & sSQL & "-->" & vbNewLine
    'response.write sSQL
    'response.Flush
    Set oRs = ExecuteCommand(sSQL,1) 
End If

然后是错误发生的地方 -

If (oRs.EOF) Then <-- fails here
       Response.Write("<TR><TD ALIGN=""center"">There is no data to report on!</TD></TR>")
    Else
        Do While Not oRs.EOF

作为最后的手段,我将回到存储过程并解构它以确保一切顺利。有没有人知道为什么我可能会收到错误?我不会在任何地方发布关闭。

这是ExecuteCommand函数 -

Function ExecuteCommand(s,i)
    On Error Resume Next
    Set ExecuteCommand = oDBc.Execute(s, , i)
End Function

4 个答案:

答案 0 :(得分:12)

这可能是旧的,但我经常遇到这个错误(当对象关闭时不允许操作。)

我所做的是在存储过程中,我添加了以下内容:

设置NOCOUNT

设置ANSI_WARNINGS OFF

在程序中的 AS 正下方。

这就是我所做的一切,问题就消失了。

答案 1 :(得分:1)

我正在为客户端维护一些旧的经典ASP代码,我们从之前的开发人员手中接过代码,这个错误让我疯狂了4个小时。

我终于在相关的SQL存储过程中发现了一些PRINT语句,这些语句用于排除故障或检查值,但实际上并没有返回行,但是它们导致了这个失败:

Set cnContentDB = Server.CreateObject("ADODB.Connection")
cnContentDB2.Open sString

sSQL = "EXEC YourStoredProc"

Set oRS2 = Server.CreateObject("ADODB.Recordset")
oRS2.Open sSQL, cnContentDB

if not oR2.EOF then   'THIS WAS GIVING THE ERROR,
                      'EVEN THOUGH THE STORED PROC ALWAYS RETURNS RECORDS

我删除了Print语句,错误就消失了。

答案 2 :(得分:0)

您需要一个连接对象。

set conn = server.CreateObject("adodb.connection")
set oRs = conn.execute(sSql)

答案 3 :(得分:0)

尽管已经有多年历史了,但我们仍然在这里寻找解决方案。 对我来说,此错误的原因是用户对存储过程没有执行权限。授予执行权限解决了该错误。