DataSet- und XmlDataDocument-Synchronisierung

Das ADO.NET-DataSet stellt Daten relational dar. Für einen hierarchischen Datenzugriff können Sie die in .NET Framework verfügbaren XML-Klassen verwenden. Diese beiden Datendarstellungen wurden bisher immer separat verwendet. Allerdings ermöglicht .NET Framework über das DataSet-Objekt und das XmlDataDocument-Objekt einen synchronen Echtzeitzugriff auf die relationale bzw. die hierarchische Darstellung der Daten.

Wenn ein DataSet mit einem XmlDataDocument synchronisiert wird, arbeiten beide Objekte mit nur einem Dataset. Wenn also am DataSet eine Änderung vorgenommen wird, spiegelt diese sich im XmlDataDocument wider und umgekehrt. Die Beziehung zwischen dem DataSet und dem XmlDataDocument sorgt für eine hohe Flexibilität, da eine einzige Anwendung mithilfe eines einzigen Datensatzes auf sämtliche Dienste, die mit dem DataSet erstellt wurden (z. B. Web Forms- und Windows Forms-Steuerelemente und Visual Studio .NET-Designer), sowie auf sämtliche XML-Dienste zugreifen kann, einschließlich Extensible Stylesheet Language (XSL), XSL Transformations (XSLT) und XML Path Language (XPath). Sie müssen nicht angeben, welche Gruppe von Diensten in Verbindung mit der Anwendung genutzt werden soll, da beide verfügbar sind.

Es gibt mehrere Möglichkeiten, ein DataSet mit einem XmlDataDocument zu synchronisieren. Ihre Möglichkeiten:

  • Sie können ein DataSet mit einem Schema (einer relationalen Struktur) und Daten auffüllen und es dann mit einem neuen XmlDataDocument synchronisieren. Dadurch entsteht eine hierarchische Ansicht der vorhandenen relationalen Daten. Beispiel:

    Dim dataSet As DataSet = New DataSet  
    
    ' Add code here to populate the DataSet with schema and data.  
    
    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)  
    
    DataSet dataSet = new DataSet();  
    
    // Add code here to populate the DataSet with schema and data.  
    
    XmlDataDocument xmlDoc = new XmlDataDocument(dataSet);  
    
  • Sie können ein DataSet nur mit einem Schema auffüllen (z. B. einem stark typisierten DataSet), es mit einem XmlDataDocument synchronisieren und das XmlDataDocument dann aus einem XML-Dokument laden. Dadurch entsteht eine relationale Ansicht der vorhandenen hierarchischen Daten. Die im DataSet-Schema enthaltenen Tabellen- und Spaltennamen müssen mit den Namen der XML-Elemente übereinstimmen, mit denen sie synchronisiert werden sollen. Bei diesem Prozess wird die Groß- und Kleinschreibung berücksichtigt.

    Beachten Sie, dass das Schema des DataSet nur mit den XML-Elementen übereinstimmen muss, die Sie in Ihrer relationalen Ansicht verfügbar machen möchten. Folglich können Sie ein sehr großes XML-Dokument und ein sehr kleines relationales "Fenster" für dieses Dokument haben. Das XmlDataDocument behält das gesamte XML-Dokument bei, auch wenn das DataSet nur einen kleinen Teil davon verfügbar macht. (Ein ausführliches Beispiel hierfür finden Sie unter Synchronisieren eines DataSet mit einem XmlDataDocument.)

    Das folgende Codebeispiel zeigt die Schritte zum Erstellen eines DataSet, zum Auffüllen von dessen Schema sowie zum anschließenden Synchronisieren mit einem XmlDataDocument. Beachten Sie, dass das DataSet-Schema nur mit den Elementen aus dem XmlDataDocument übereinstimmen muss, das Sie mit dem DataSet verfügbar machen möchten.

    Dim dataSet As DataSet = New DataSet  
    
    ' Add code here to populate the DataSet with schema, but not data.  
    
    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)  
    xmlDoc.Load("XMLDocument.xml")  
    
    DataSet dataSet = new DataSet();  
    
    // Add code here to populate the DataSet with schema, but not data.  
    
    XmlDataDocument xmlDoc = new XmlDataDocument(dataSet);  
    xmlDoc.Load("XMLDocument.xml");  
    

    Sie können ein XmlDataDocument nicht laden, wenn es mit einem DataSet synchronisiert ist, das Daten enthält. In diesem Fall wird eine Ausnahme ausgelöst.

  • Erstellen Sie ein neues XmlDataDocument, und laden Sie es aus einem XML-Dokument. Greifen Sie anschließend mit der DataSet-Eigenschaft des XmlDataDocument auf die relationale Ansicht der Daten zu. Sie müssen das Schema des DataSet festlegen, bevor Sie die Daten im XmlDataDocument mithilfe des DataSet anzeigen können. Auch hier gilt: Die im DataSet-Schema enthaltenen Tabellen- und Spaltennamen müssen mit den Namen der XML-Elemente übereinstimmen, mit denen sie synchronisiert werden sollen. Bei diesem Prozess wird die Groß- und Kleinschreibung berücksichtigt.

    Das folgende Codebeispiel zeigt, wie auf die relationale Ansicht der Daten in einem XmlDataDocument zugegriffen wird.

    Dim xmlDoc As XmlDataDocument = New XmlDataDocument  
    Dim dataSet As DataSet = xmlDoc.DataSet  
    
    ' Add code here to create the schema of the DataSet to view the data.  
    
    xmlDoc.Load("XMLDocument.xml")  
    
    XmlDataDocument xmlDoc = new XmlDataDocument();  
    DataSet dataSet = xmlDoc.DataSet;  
    
    // Add code here to create the schema of the DataSet to view the data.  
    
    xmlDoc.Load("XMLDocument.xml");  
    

Ein weiterer Vorteil der Synchronisierung eines XmlDataDocument mit einem DataSet besteht darin, dass das XML-Originaldokument erhalten bleibt. Wenn das DataSet mit ReadXml aus einem XML-Dokument aufgefüllt wird und die Daten später mit WriteXml als XML-Dokument zurückgeschrieben werden, kann dieses sich erheblich vom ursprünglichen XML-Dokument unterscheiden. Das liegt daran, dass das DataSet weder Formatierung (z. B. Leerzeichen) noch hierarchische Informationen (z. B. die Elementreihenfolge) des XML-Dokuments beibehält. Das DataSet enthält auch keine Elemente des XML-Dokuments, die aufgrund einer Nichtübereinstimmung mit dem Schema des DataSet ignoriert wurden. Bei der Synchronisierung eines XmlDataDocument mit einem DataSet werden Formatierung und hierarchische Elementstruktur des ursprünglichen XML-Dokuments im XmlDataDocument beibehalten, während das DataSet nur Daten und Schemainformationen enthält, die für das DataSet relevant sind.

Bei der Synchronisierung eines DataSet mit einem XmlDataDocument können die Ergebnisse unterschiedlich ausfallen, je nachdem, ob die DataRelation-Objekte geschachtelt sind oder nicht. Weitere Informationen finden Sie unter Schachteln von DataRelations.

In diesem Abschnitt

Synchronisieren eines "DataSet "mit einem "XmlDataDocument"
Veranschaulicht die Synchronisierung eines stark typisierten DataSet mit minimalem Schema mit einem XmlDataDocument.

Ausführen einer XPath-Abfrage für ein DataSet
Veranschaulicht die Ausführung einer XPath-Abfrage für den Inhalt eines DataSet.

Anwenden einer XSLT-Transformation auf ein DataSet
Veranschaulicht die Anwendung einer XSL-Transformation auf den Inhalt eines DataSet.

Using XML in a DataSet (Verwenden von XML in einem DataSet)
Beschreibt, wie das DataSet mit XML als Datenquelle interagiert, einschließlich Laden und Beibehalten des Inhalts eines DataSet als XML-Daten.

Verschachteln von "DataRelations"
Erläutert die Bedeutung geschachtelter DataRelation-Objekte beim Darstellen des Inhalts eines DataSet als XML-Daten und beschreibt die Erstellung dieser Beziehungen.

"DataSets", "DataTables" und "DataViews"
Beschreibt das DataSet und dessen Verwendung beim Verwalten von Anwendungsdaten sowie beim Interagieren mit Datenquellen, einschließlich relationaler Datenbanken und XML-Daten.

XmlDataDocument
Enthält Referenzinformationen zur XmlDataDocument-Klasse.

Siehe auch