以 XML 格式保留记录

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

注意

将分层 Recordset(数据形状)保存为 XML 格式时会受到一些限制。 如果分层 Recordset 包含挂起的更新,则无法保存到 XML,并且无法保存参数化的分层 Recordset。 有关详细信息,请参阅 持久化筛选和分层 Recordset

将数据保存到 XML 中并通过 ADO 再次加载回来的最简单方法是分别使用 Save 和 Open 方法。 下面的 ADO 代码示例演示了如何将 Titles 表中的数据保存到名为 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 对象。

本部分包含以下主题。