流和持久性

Recordset 对象 保存 方法存储,或 保留、文件中 RecordsetOpen 方法从该文件还原 Recordset

使用 ADO 2.7 或更高版本,SaveOpen 方法还可以将 Recordset 保存到 Stream 对象。 使用远程数据服务(RDS)和活动服务器页(ASP)时,此功能特别有用。

有关如何在 ASP 页面上自行使用持久性的详细信息,请参阅当前的 ASP 文档。

以下是一些方案,演示如何使用 Stream 对象和持久性。

方案 1

此方案只需将 Recordset 保存到文件中,然后保存到 Stream。 然后,它将持久化流打开到另一个 Recordset

Dim rs1 As ADODB.Recordset  
Dim rs2 As ADODB.Recordset  
Dim stm As ADODB.Stream  
  
Set rs1 = New ADODB.Recordset  
Set rs2 = New ADODB.Recordset  
Set stm = New ADODB.Stream  
  
rs1.Open   "SELECT * FROM Customers", "Provider=sqloledb;" & _  
        "Data Source=MyServer;Initial Catalog=Northwind;" & _  
        "Integrated Security=SSPI;""", adopenStatic, adLockReadOnly, adCmdText  
rs1.Save "c:\myfolder\mysubfolder\myrs.xml", adPersistXML  
rs1.Save stm, adPersistXML  
rs2.Open stm  

方案 2

此方案以 XML 格式将 Recordset 持久化到 Stream 中。 然后,它会将 Stream 读入一个字符串,你可以检查、操作或显示这些字符串。

Dim rs As ADODB.Recordset  
Dim stm As ADODB.Stream  
Dim strRst As String  
  
Set rs = New ADODB.Recordset  
Set stm = New ADODB.Stream  
  
' Open, save, and close the recordset.   
rs.Open "SELECT * FROM Customers", "Provider=sqloledb;" & _  
        "Data Source=MyServer;Initial Catalog=Northwind;" & _  
        "Integrated Security=SSPI;"""  
rs.Save stm, adPersistXML  
rs.Close  
Set rs = nothing  
  
' Put saved Recordset into a string variable.  
strRst = stm.ReadText(adReadAll)  
  
' Examine, manipulate, or display the XML data.  
...  

方案 3

此示例代码显示 ASP 代码将 Recordset 作为 XML 直接保存到 响应 对象:

...  
<%  
response.ContentType = "text/xml"  
  
' Create and open a Recordset.  
Set rs = Server.CreateObject("ADODB.Recordset")  
rs.Open "select * from Customers", "Provider=sqloledb;" & _  
        "Data Source=MyServer;Initial Catalog=Northwind;" & _  
        "Integrated Security=SSPI;"""  
  
' Save Recordset directly into output stream.  
rs.Save Response, adPersistXML   
  
' Close Recordset.  
rs.Close  
Set rs = nothing  
%>  
...  

方案 4

在此方案中,ASP 代码以 ADTG 格式将 Recordset 的内容写入客户端。 适用于 OLE DB Microsoft Cursor Service 可以使用此数据创建断开连接的 Recordset

RDS DataControl的新属性 URL指向用于生成 Recordset的 .asp 页面。 这意味着在没有 RDS 的情况下,可以通过使用服务器端 DataFactory 对象或用户编写业务对象来获取 Recordset 对象。 这大大简化了 RDS 编程模型。

服务器端代码,名为 https://server/directory/recordset.asp:

<%  
Dim rs   
Set rs = Server.CreateObject("ADODB.Recordset")  
rs.Open "select au_fname, au_lname, phone from Authors", ""& _  
        "Provider=sqloledb;Data Source=MyServer;" & _  
        "Initial Catalog=Pubs;Integrated Security=SSPI;"  
response.ContentType = "multipart/mixed"  
rs.Save response, adPersistADTG  
%>  

客户端代码:

<HTML>  
<HEAD>  
<TITLE>RDS Query Page</TITLE>  
</HEAD>  
<body>  
<CENTER>  
<H1>Remote Data Service 2.5</H1>  
<TABLE DATASRC="#DC1">  
   <TR>   
      <TD><SPAN DATAFLD="au_fname"></SPAN></TD>  
      <TD><SPAN DATAFLD="au_lname"></SPAN></TD>  
      <TD><SPAN DATAFLD="phone"></SPAN></TD>  
   </TR>  
</TABLE>  
<BR>  
  
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"  
    ID=DC1 HEIGHT=1 WIDTH = 1>  
    <PARAM NAME="URL" VALUE="https://server/directory/recordset.asp">  
</OBJECT>  
  
</SCRIPT>  
</BODY>  
</HTML>  

开发人员还可以选择在客户端上使用 Recordset 对象:

...  
function GetRs()   
    {  
    rs = CreateObject("ADODB.Recordset");  
    rs.Open "https://server/directory/recordset.asp"  
    DC1.SourceRecordset = rs;  
    }  
...  

另请参阅

Open 方法 (ADO Recordset)
记录对象 (ADO)
Save 方法