【问题标题】:In ASP, how do I return multiple recordsets from a parameterized query?在 ASP 中,如何从参数化查询返回多个记录集?
【发布时间】:2014-04-17 17:24:34
【问题描述】:

我可以找到这个问题的每个部分,但它们不能一起工作。将 sql 字符串传递给 Recordset.Open 时,多个记录集可以正常工作,但是一旦升级到 ADODB.Command,Command.Execute 和 Recordset.Open 都不会从提供的命令返回超过第一个记录集。相反,如果不以某种方式依赖 Command,我将无法使用参数化查询。

以下是我的 SQL 代码:

declare @var int
select @var = column from table where othercolumn = ?
(other stuff with @var)

声明似乎算作一个记录集,所以我无法获得任何信息。我很犹豫是否将其放入存储过程中,因为它会导致扩散,但如果这是我将这样做的唯一方法。

【问题讨论】:

  • 在您的 SQL 中使用 SET NOCOUNT ON; 来停止强制关闭记录集的行计数。或者当使用 Set rs = cmd.Execute() 之类的东西时,使用 Set rs = rs.NextRecordSet 在多记录集查询中获取下一个记录集。

标签: sql asp-classic adodb


【解决方案1】:

这是一个基本的例子,魔术线是;

Set rs = rs.NextRecordSet

伪代码,如有错别字,敬请见谅。

Dim cmd, rs, sql, connstring

Set cmd = Server.CreateObject("ADODB.Command")

connstring = "your connection string here"

sql = ""
sql = sql & "SELECT col1, col2 FROM table1 WHERE col0 = ?" & vbCrLf
sql = sql & "SELECT col1, col2 FROM table2 WHERE col0 = ?"

With cmd
  .ActiveConnection = connstring
  .CommandType = adCmdText
  .CommandText = sql
  .Parameters.Append(.CreateParameter("@table1id", adInteger, adParamInput, 4))
  .Parameters.Append(.CreateParameter("@table2id", adInteger, adParamInput, 4))
  'Return first Recordset for table1
  'id1 and id2 contain your values to pass in your parameters.
  Set rs = .Execute(, Array(id1, id2))
  'Do something with your data, use .GetRows() to return an array or something
  'Then return your second Recordset for table2
  Set rs = rs.NextRecordSet
  'Do something with your data, use .GetRows() to return an array or something
  Call rs.Close()
  Set rs = Nothing
End With
'Bit of cleanup
Set cmd = Nothing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多