Потоки и сохраняемость
Объект Recordset метод Save сохраняет, или поддерживает, набор записей в файле, а метод Open восстанавливает набор записей из этого файла.
С помощью ADO 2.7 или более поздней версии методы Save и Open могут также сохранять Recordset в объект Stream. Эта функция особенно полезна при работе с удаленной службой данных (RDS) и активными серверными страницами (ASP).
Дополнительные сведения о том, как сохраняемость можно использовать на страницах ASP, см. в текущей документации по ASP.
Ниже приведены несколько сценариев, показывающих, как можно использовать объекты потока Stream и их сохраняемость.
Сценарий 1
Этот сценарий просто сохраняет набор записей в файл, а затем в 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
Этот сценарий сохраняет набор записей в Stream в формате XML. Затем 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 сохраняется набор записей в виде 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 клиенту. Служба Microsoft Cursor Service для OLE DB может использовать эти данные для создания отключенного Recordset.
Новое свойство на DataControlв RDS, URL, указывает на .asp страницу, которая создает Recordset. Это означает, что объект набора записей можно получить без RDS с помощью серверного объекта DataFactory или пользователя, написающего бизнес-объект. Это значительно упрощает модель программирования 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>
Разработчики также могут использовать объект набора записей на клиенте:
...
function GetRs()
{
rs = CreateObject("ADODB.Recordset");
rs.Open "https://server/directory/recordset.asp"
DC1.SourceRecordset = rs;
}
...
См. также
Метод Open (ADO Recordset)
объект записи (ADO)
метод сохранения