我已经从这个问题的其他一些回答中巡游并实现了代码,但我仍然没有运气。我仍然收到错误。
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
作为最后的手段,我将返回到存储过程并解构它,以确保那里一切正常。有没有人知道为什么我可能会收到错误?我不会在任何地方发布关闭。
这是执行命令函数 -
Function ExecuteCommand(s,i)
On Error Resume Next
Set ExecuteCommand = oDBc.Execute(s, , i)
End Function
这可能很旧,但我经常遇到该错误(关闭对象时不允许操作)。
我所做的是在存储过程中,我添加以下内容:
将"无计数"设置为开启
关闭ANSI_WARNINGS
就在过程中的 AS 正下方。
这就是我所做的一切,问题就消失了。
我正在为客户维护一些旧的经典 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 语句,错误消失了。
虽然这已经有好几年的历史了,但我们仍然在这里寻找解决方案。对我来说,此错误的原因是用户对存储过程没有执行权限。授予执行权限解决了此错误。
你需要一个连接对象。
set conn = server.CreateObject("adodb.connection")
set oRs = conn.execute(sSql)