【问题标题】:retrieve resultset from MSSQL stored procedure in classic asp从经典asp中的MSSQL存储过程中检索结果集
【发布时间】:2014-05-06 15:58:35
【问题描述】:

我并不精通 ASP,但这就是我目前必须使用的。我有一个存储过程,它生成一个我想在经典 ASP 中处理的结果集。如果我在 SQL Management Studio 中使用相同的参数运行 SP,我可以看到结果集,因此我知道它的工作原理。

存储过程采用 1 个参数 @part,我使用以下代码进行了测试,可以看到 SP 是使用 SQL Profiler 执行的,但我得到了从 ASP 返回的“500 - 内部服务器错误”,而不是显示的结果集.

如何正确检索结果集?

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

【问题讨论】:

标签: vbscript asp-classic ado


【解决方案1】:

所以我自己解决了这个问题。在挖掘了一些日志之后,我看到了一个我以前没有发现的错误:

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

【讨论】:

  • 其实你确实需要使用Call objRecordset.Close()来关闭ADODB.Recordset你的问题是ADODB.Command没有Close()方法。
  • 您还可以通过在错误页面中设置500-100.asp 脚本来受益,以便在开发时获得错误消息的详细输出。
  • 感谢 Lankymart,我已更新答案以反映您的评论。
猜你喜欢
  • 2012-11-09
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多