流和持久性
Recordset 对象 保存 方法存储,或 保留、文件中 Recordset,Open 方法从该文件还原 Recordset。
使用 ADO 2.7 或更高版本,Save 和 Open 方法还可以将 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;
}
...