我没有做过任何经典的ASP几年,现在试图从c#重新进入它是不可能的!我有一个递归函数,非常简单地应该根据传递给函数的值查询数据库,一旦函数停止调用自身它返回记录集....但是我得到旧错误'80020009'消息。我已经在函数之外声明了记录集。
任何人都会以我的方式看到错误吗?
Dim objRsTmp
Function buildList(intParentGroupID)
Set objRsTmp = Server.CreateObject("Adodb.Recordset")
SQLCommand = "SELECT * FROM tblGroups WHERE tblGroups.intParentGroupID = " & intParentGroupID & ";"
objRsTmp.Open SQLCommand, strConnection, 3, 3
If Not objRsTmp.Eof Then
While Not objRsTmp.Eof
Response.Write(objRsTmp("strGroup") & "<br />")
buildList(objRsTmp("intID"))
objRsTmp.MoveNext
Wend
End If
Set buildList = objRsTmp
'#objRsTmp.Close()
'Set objRsTmp = Nothing
End Function
Set objRs = buildList(0)
If Not objRs.Eof Then
Response.Write("There are records")
While Not objRs.Eof
For Each oFld in objRs.Fields
Response.Write(oFld.Name & ": " & oFld.Value & ",")
next
Response.Write("<br />")
objRs.MoveNext
Wend
End If
非常感谢任何协助。
此致 人
答案 0 :(得分:2)
全局范围内有一个objRsTmp
实例,这意味着它在堆栈中的每个buildList()
之间共享;因此,无论何时递归到buildList()
并致电objRsTmp.Open()
,您都会导致堆叠中的先前buildList()
使用新的objRsTmp
。
我不认为这就像你循环它的行一样,好像每个buildList()
都有自己的结果集。
要做到这一点,你必须使记录集本地...但是,这是一种非常昂贵的方法,特别是因为每次迭代也创建了一个新的连接对象。
根据您的架构/ rdbms,通常采用单一查询方式来提取一组与层次相关的记录。