我对如何从经典ASP中的函数返回可读记录集感到茫然.
这就是我提出的,但它不起作用:
Response.Clear Response.CharSet = "utf-8" Response.ContentType = "text/plain" Dim Count Set Count = Test Response.Write Count.Fields(0).Value Function Test Dim Query,Connection,Command,Recordset Query = " blah blah blah " Set Connection = Server.CreateObject("ADODB.Connection") Set Command = Server.CreateObject("ADODB.Command") Set Recordset = Server.CreateObject("ADODB.Recordset") Connection.ConnectionString = "blah blah blah" Connection.Open Set Command.ActiveConnection = Connection Command.CommandText = Query Set Recordset = Command.Execute Set Test = Recordset Recordset.Close Connection.Close Set Recordset = Nothing Set Command = Nothing Set Connection = Nothing End Function
Response.Write Count.Fields(0).Value行产生无法在与请求的名称或序号对应的集合中找到Item.错误.
用Response.Write Count.Status替换它我在对象关闭时不允许操作.错误.
添加Count.Open会给出连接不能用于执行此操作.在此上下文中它是关闭的或无效的.错误.
马克B回答后编辑:
我已经查看了断开连接的记录集,但我不知道如何在我的示例中使用它们:每个教程都使用Recordset.Open直接将查询提供给记录集,但我使用的是参数化查询,甚至尝试了很多方法我无法当路上有ADODB.Command时,获得相同的结果.
我该怎么办?
提前致谢.
以下是基于Eduardo Molteni答案的解决方案:
Function Test Dim Connection,Recordset Set Connection = Server.CreateObject("ADODB.Connection") Set Command = Server.CreateObject("ADODB.Command") Set Recordset = Server.CreateObject("ADODB.Recordset") Connection.ConnectionString = "blah blah blah" Connection.Open Command.ActiveConnection = Connection Command.CommandText = "blah blah blah" Recordset.CursorLocation = adUseClient Recordset.Open Command,adOpenForwardOnly,adLockReadOnly Set Recordset.ActiveConnection = Nothing Set Test = Recordset Connection.Close Set Recordset = Nothing Set Command = Nothing Set Connection = Nothing End Function
Response.Clear Response.CharSet = "utf-8" Response.ContentType = "text/plain" Dim Recordset Set Recordset = Test Response.Write Recordset.Fields(0).Value Recordset.Close Set Recordset = Nothing
解决方法
这是一个返回断开连接的记录集的函数
Function RunsqlReturnRS(sqlstmt,params()) On Error Resume next ''//Create the ADO objects Dim rs,cmd Set rs = server.createobject("ADODB.Recordset") Set cmd = server.createobject("ADODB.Command") ''//Init the ADO objects & the stored proc parameters cmd.ActiveConnection = GetConnectionString() cmd.CommandText = sqlstmt cmd.CommandType = adCmdText cmd.CommandTimeout = 900 ''// propietary function that put params in the cmd collectParams cmd,params ''//Execute the query for readonly rs.CursorLocation = adUseClient rs.Open cmd,adLockReadOnly If err.number > 0 then BuildErrorMessage() exit function end if ''// Disconnect the recordset Set cmd.ActiveConnection = Nothing Set cmd = Nothing Set rs.ActiveConnection = Nothing ''// Return the resultant recordset Set RunsqlReturnRS = rs End Function