Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp classic ASP-使用函数参数引用记录集_Asp Classic_Vbscript - Fatal编程技术网

Asp classic ASP-使用函数参数引用记录集

Asp classic ASP-使用函数参数引用记录集,asp-classic,vbscript,Asp Classic,Vbscript,如果标题有点模糊,很抱歉。我想不出还能怎么说 我有一个脚本,它将数据检索到3个不同的记录集中。它们被称为rs1、rs2和rs3 我在脚本后面有一段相当大的代码,所以我创建了一个函数来节省空间等 在函数中,我希望使用前面打开的记录集中的信息。我已尝试将记录集的名称传递给函数,如下所示: Function displayData(recordsetName) response.write(recordsetName.Source) End Function displayData("rs1")

如果标题有点模糊,很抱歉。我想不出还能怎么说

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

我在脚本后面有一段相当大的代码,所以我创建了一个函数来节省空间等

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

Function displayData(recordsetName)

response.write(recordsetName.Source)

End Function

displayData("rs1")
然而,这是试图显示一个名为recordsetName的记录集的结果,由于该记录集不存在,它抛出了一个错误

有人告诉我使用“ByRef”,但是这会抛出一个错误,说记录集不存在

如何使用传递给函数的recorset名称作为参数


谢谢

如果您想要的是,当您调用它时,它会打印到浏览器中,您应该使用的是一个
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 ().
它必须是潜艇,因为它不会返回任何东西

否则,如果displayData应返回某些内容(计算结果、响应代码或写入浏览器的字符串),则需要使用函数

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

Dim rs1 as new Recordset
'snip
displayData (rs1)

不是舒尔,你为什么要用其他方式来做这件事。

你不能传递记录集的名称,你必须传递记录集对象

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

我还将您的函数更改为Sub,因为在VB中,函数必须返回某些内容。

如果您真的想输入名称,您可以这样做

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

DisplayData("rs1")
但是不要。这很愚蠢,会给你带来麻烦。你应该按照其他人说的做,并在记录集中传递

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

DisplayData(rs1)

这里的其他答案是相似的,但

Sub DiplayData(rst)
   Response.Write rst.Source
End Sub
DisplayData rs1
注意
Sub
not
Function
,因为没有返回值。 另外,如果将过程作为语句而不是函数调用,则不要将参数括在()中。

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

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

它应该只是子显示数据(ByRef rst),而且ByRef是superflous。您是正确的,ByRef是默认值,但在这些情况下我喜欢显式显示。:)声明应该是Dim rst,因为这是asp classic。从技术上讲,调用Sub时不能使用括号(尽管在只传递一个参数的情况下,编译器忽略了这一点,因为它似乎将括号视为第一个参数表达式的一部分,而不是调用约定),您是对的。我已经更正了答案。(不要匆忙回答)谢谢大家的回答。我就快到了,但我只需要一点提示!!!