从经典的asp中的MSSQL存储过程中检索结果集

时间:2014-05-06 15:58:36

标签: vbscript asp-classic ado

我不熟悉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

1 个答案:

答案 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的评论,我确实需要关闭记录集。