传统的ASP错误:操作对象时关闭不允许(Classic ASP Error: Operation i

2019-09-23 20:40发布

我已经战罢和一些对这个问题的其他反应的实现代码,但我仍然没有运气。 我仍然得到错误。

    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

Answer 1:

你需要一个连接对象。

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


Answer 2:

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

我要做的就是在存储过程中,我添加了follwing:

SET NOCOUNT ON

SET ANSI_WARNINGS OFF

正下方的AS中的过程。

这就是我做的,问题消失。



Answer 3:

我保持一个客户端,代码,我们从之前的开发商接手一些旧的经典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

我删除了报表打印,和错误走了。



文章来源: Classic ASP Error: Operation is not allowed when the object is closed