从经典ASP中的函数返回记录集

我对如何从经典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

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...