我不熟悉ASP,但那是我现在必须要合作的东西。我有一个存储过程,生成一个我想在经典ASP中处理的结果集。如果我在SQL Management Studio中使用相同的参数运行SP,我可以看到结果集,所以我知道它的工作原理。
存储过程需要1个参数@part,我使用以下代码进行测试,并且可以看到SP是使用SQL事件探查器执行的,但是我得到了一个' 500 - 内部服务器错误'从ASP返回而不是显示的结果集。
如何正确检索结果集?
Dim fpart, objCommand, objRecordset
fpart = "SMF10320BRNU12"
Set objCommand = Server.CreateObject("ADODB.Command")
With objCommand
.ActiveConnection = db
.CommandText = "sp_movements"
.CommandType = 4
.CommandTimeout = 240
.Parameters.Append .CreateParameter("@part", 200, 1, 20)
.Parameters("@part") = fpart
Set objRecordset = .Execute
End With
for each x in objRecordset.Fields
Response.Write(x.name)
Response.Write(" = ")
Response.Write(x.value & "<br />")
next
Response.Write("<br />")
objRecordset.MoveNext
objRecordset.Close
Set objRecordset = nothing
objCommand.Close
Set objCommand = nothing
答案 0 :(得分:0)
所以我自己想出来了。在挖掘了一些日志后,我看到了一个我之前没有发现过的错误:
Object_doesn't_support_this_property_or_method:_'Close'
原来我错误地尝试关闭命令对象:objCommand.Close
我的工作解决方案是:
Dim fpart, objCommand, objRecordset
fpart = "SMF10320BRNU12"
Set objCommand = Server.CreateObject("ADODB.Command")
With objCommand
.ActiveConnection = db
.CommandText = "sp_movements"
.CommandType = 4
.CommandTimeout = 240
.Parameters.Append .CreateParameter("@part", 200, 1, 20)
.Parameters("@part") = fpart
Set objRecordset = .Execute
End With
Do until objRecordset.EOF
for each x in objRecordset.Fields
Response.Write(x.name)
Response.Write(" = ")
Response.Write(x.value & "<br />")
next
Response.Write("<br />")
objRecordset.MoveNext
loop
objRecordset.Close
Set objRecordset = nothing
Set objCommand = nothing
注意:强>
此代码还有一个Do until循环,用于输出记录集中的所有行,但这并不是在页面上获取输出所必需的。
修改强>
编辑以反映下面Lankymart的评论,我确实需要关闭记录集。