ASP - 使用Function参数来引用记录集

时间:2009-08-18 19:43:38

标签: asp-classic vbscript

很抱歉,如果标题有点含糊不清。我想不出怎么说呢!

我有一个脚本可以将数据检索到3个不同的记录集中。它们被称为rs1,rs2和rs3。

我稍后在脚本中有相当多的代码,所以我创建了一个节省存储空间等功能。

在函数中,我希望使用之前打开的记录集中的信息。我已经尝试将记录集的名称传递给函数,如下所示:

Function displayData(recordsetName)

response.write(recordsetName.Source)

End Function

displayData("rs1")

然而,这是试图显示一个名为recordsetName的记录集的结果,因为它不存在它会引发错误。

有人告诉我使用'ByRef'然而这会引发错误,说记录集不存在。

如何将传递给函数的recorset名称用作参数?

由于

5 个答案:

答案 0 :(得分:6)

这里的其他答案类似,但......

Sub DiplayData(rst)
   Response.Write rst.Source
End Sub
DisplayData rs1

注意Sub而不是Function,因为没有返回任何值。 此外,如果您将过程称为语句而不是将其值分配给变量的函数,请不要将参数括在()中。

答案 1 :(得分:1)

如果您想要的是,当您调用它时,它会打印到浏览器,您应该使用Sub这样的方式:

Sub displayData (rs)
    Response.Write (rs.Source)
End Sub    dim rs1 as new Recordset
'snip
displayData rs1 'note that calling subs in VB classic, doesn't use the enclosing ().

必须一个Sub,因为它不会返回任何内容。

否则,如果displayData应返回某些内容,无论是计算结果,还是响应代码,或者写入浏览器的字符串,都需要使用函数

Function displayData (rs)
    Response.Write (rs.Source)
End Function

Dim rs1 as new Recordset
'snip
displayData (rs1)

为什么你试图以任何其他方式做到这一点并不是真的。

答案 2 :(得分:0)

您无法传递必须传递记录集对象的记录集的名称。

Sub DisplayData(byref rst as recordset)
response.write(rst.Source)
End Sub
DisplayData(rs1)

我还将你的函数改为Sub,因为在VB中函数必须返回一些东西。

答案 3 :(得分:0)

如果你真的想传递你可以做的名字

Sub DisplayData(rsName)
    Eval("Response.Write(" & rsName & ".Source)")
End Sub

DisplayData("rs1")

但不要。这很愚蠢,可以让你陷入困境。你应该这样做其他人如何说并传递记录集本身。

Sub DisplayData(rs)
    Response.Write rs.Source
End Sub

DisplayData(rs1)

答案 4 :(得分:0)

通过它的名称检索任何变量的最快和最脏(当然也是最不安全)的方法是:

Function DisplayData(rsName)
   Dim localRS

   Set localRS = Eval(rsName)

   Response.Write localRS.Source
End Function

如果从Web(通过表单等)检索rsName的值,则不应使用上述方法,因为这为ASP / VBScript级别提供了注入攻击的范围。

但是,鉴于提到的可用记录集数量有限,以下内容会更安全:

Function DisplayData(rsName)
   Dim localRS

   Select Case LCase(rsName) ' Case insensitive matches
   Case "rs1"
      Set localRS = rs1
   Case "rs2"
      Set localRS = rs2
   Case "rs3"
      Set localRS = rs3
   Case Else ' What to do if the name is not recognised
      Err.Raise 4000, "DisplayData", "Bad record set name"
   End Select

   Response.Write localRS.Source
End Function