以 XML 格式保存记录

与 ADTG 格式一样,XML 格式的 Recordset 持久性是通过 Microsoft OLE DB 持久性提供程序实现的。 此提供程序从保存的 XML 文件或流中生成一个仅向前只读行集,其中包含 ADO 生成的架构信息。 同样,它可以获取 ADO Recordset,生成 XML,并将其保存到实现 COM IStream 接口的文件或任何对象。 (事实上,文件只是支持 IStream的对象的另一个示例。对于版本 2.5 及更高版本,ADO 依赖于 Microsoft XML 分析器(MSXML)将 XML 加载到 Recordset;因此,需要 msxml.dll。

注意事项

将分层 记录集(数据形状)保存到 XML 格式时,存在一些限制。 如果分层 Recordset 包含挂起的更新,则无法保存到 XML;同样,您也无法保存参数化的分层 Recordset。 有关详细信息,请参阅 持久化筛选和分层记录集

将数据保存到 XML 中并通过 ADO 重新加载数据的最简单方法是分别使用 “保存”和 “打开” 方法。 以下 ADO 代码示例演示如何将数据保存到 标题 表中名为titles.sav的文件。

Dim rs as new Recordset  
Dim rs2 as new Recordset  
Dim c as new Connection  
Dim s as new Stream  
  
' Query the Titles table.  
c.Open "provider=sqloledb;data source=MySQLServer;initial catalog=pubs;Integrated Security='SSPI'"  
rs.cursorlocation = adUseClient  
rs.Open "select * from titles", c, adOpenStatic  
  
' Save to the file in the XML format. Note that if you don't specify   
' adPersistXML, a binary format (ADTG) will be used by default.  
rs.Save "titles.sav", adPersistXML  
  
' Save the recordset into the ADO Stream object.  
rs.save s, adPersistXML  
rs.Close  
c.Close  
  
set rs = nothing  
  
' Reopen the file.  
rs.Open "titles.sav",,,,adCmdFile  
' Open the Stream back into a Recordset.  
rs2.open s  

ADO 始终保留整个 Recordset 对象。 如果要保留 Recordset 对象的行子集,请使用 Filter 方法缩小行范围或更改所选子句。 但是,必须使用客户端游标(CursorLocation = adUseClient)打开 Recordset 对象,才能使用 Filter 方法来保存行子集。 例如,若要检索以字母“b”开头的标题,可以将筛选器应用于打开的 Recordset 对象:

rs.Filter "title_id like 'B*'"  
rs.Save "btitles.sav", adPersistXML  

ADO 始终使用客户端游标引擎行集生成可滚动、可书签的 Recordset 对象,该对象位于持久性提供程序生成的仅向前数据之上。

本节包含以下主题。