加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:11:51 所属栏目:asp.Net 来源:网络整理
导读:我对如何从经典ASP中的函数返回可读记录集感到茫然. 这就是我提出的,但它不起作用: Response.ClearResponse.CharSet = "utf-8"Response.ContentType = "text/plain"Dim CountSet Count = TestResponse.Write Count.Fields(0).ValueFunction Test Dim Query,
我对如何从经典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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读