Asp classic ASP-使用函数参数引用记录集
如果标题有点模糊,很抱歉。我想不出还能怎么说 我有一个脚本,它将数据检索到3个不同的记录集中。它们被称为rs1、rs2和rs3 我在脚本后面有一段相当大的代码,所以我创建了一个函数来节省空间等 在函数中,我希望使用前面打开的记录集中的信息。我已尝试将记录集的名称传递给函数,如下所示:Asp classic ASP-使用函数参数引用记录集,asp-classic,vbscript,Asp Classic,Vbscript,如果标题有点模糊,很抱歉。我想不出还能怎么说 我有一个脚本,它将数据检索到3个不同的记录集中。它们被称为rs1、rs2和rs3 我在脚本后面有一段相当大的代码,所以我创建了一个函数来节省空间等 在函数中,我希望使用前面打开的记录集中的信息。我已尝试将记录集的名称传递给函数,如下所示: Function displayData(recordsetName) response.write(recordsetName.Source) End Function displayData("rs1")
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
notFunction
,因为没有返回值。
另外,如果将过程作为语句而不是函数调用,则不要将参数括在()中。按变量名称检索任何变量的最快、最脏(当然也是最不安全)的方法是:
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时不能使用括号(尽管在只传递一个参数的情况下,编译器忽略了这一点,因为它似乎将括号视为第一个参数表达式的一部分,而不是调用约定),您是对的。我已经更正了答案。(不要匆忙回答)谢谢大家的回答。我就快到了,但我只需要一点提示!!!