Beibehalten von Datensätzen im XML-Format

Wie im ADTG-Format wird die Recordset-Persistenz auch im XML-Format mit Microsoft OLE DB-Persistenzanbieter implementiert. Dieser Anbieter generiert ein schreibgeschütztes Vorwärtsrowset aus einer gespeicherten XML-Datei oder einem Stream, der die von ADO generierten Schemainformationen enthält. Ebenso kann ein ADO-Recordset verwendet werden, XML generieren und in einer Datei oder einem beliebigen Objekt speichern, das die COM-IStream-Schnittstelle implementiert. Eigentlich ist eine Datei nur ein anderes Beispiel für ein Objekt, das IStream unterstützt. Für die Versionen 2.5 und höher nutzt ADO den Microsoft-XML-Parser (MSXML), um den XML-Code in das Recordset zu laden. Daher wird „msxml.dll“ benötigt.

Hinweis

Beim Speichern hierarchischer Recordsets (Datenformen) im XML-Format gelten einige Einschränkungen. Sie können sie nicht im XML-Format speichern, wenn das hierarchische Recordset ausstehende Updates enthält, und Sie können kein parameterisiertes hierarchisches Recordset speichern. Weitere Informationen finden Sie unter Beibehalten gefilterter und hierarchischer Recordsets.

Die einfachste Möglichkeit, Daten in XML beizubehalten und sie wieder über ADO zu laden, ist jeweils mithilfe der Methoden Save und Open. Im folgenden ADO-Codebeispiel wird das Speichern der Daten in der Tabelle Titles in einer Datei mit dem Namen „titles.sav“ veranschaulicht.

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 speichert behält stets das gesamte Recordset-Objekt bei. Wenn Sie einige Zeilen des Recordset-Objekts beibehalten möchten, verwenden Sie die Filter-Methode, um die Zeilen einzugrenzen oder ihre Auswahlklausel zu ändern. Sie müssen jedoch ein Recordset-Objekt mit einem clientseitigen Cursor (CursorLocation = adUseClient) öffnen, um die Filter-Methode zum Speichern einer Teilmenge von Zeilen zu verwenden. Wenn Sie beispielsweise Titel abrufen möchten, die mit dem Buchstaben „b“ beginnen, können Sie einen Filter auf ein geöffnetes Recordset-Objekt anwenden:

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

ADO verwendet immer das Client Cursor-Engine-Rowset, um ein scrollbares, textmarkenfähiges Recordset-Objekt oben auf den Vorwärtsdaten zu erstellen, die vom Persistenzanbieter generiert wurden.

In diesem Abschnitt werden die folgenden Themen behandelt: