Freigeben über


Synchronisieren eines DataSets mit einem XmlDataDocument

Das ADO.NET-DataSet stellt Daten relational dar. Für einen hierarchischen Datenzugriff können Sie die XML-Klassen verwenden, die in .NET Framework verfügbar sind. Diese beiden Datendarstellungen wurden sonst 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 Datensatz. Bei einer Änderung des DataSets wird die Änderung somit im XmlDataDocument angezeigt und umgekehrt. Die Beziehung zwischen dem DataSet und dem XmlDataDocument sorgt für eine hohe Flexibilität, weil eine einzelne Anwendung mit Hilfe eines einzelnen Datensatzes auf sämtliche Dienste, die um das DataSet aufgebaut wurden (z. B. Web Forms- und Windows Forms-Steuerelemente sowie Visual Studio .NET-Designer), sowie auf das Paket der XML-Dienste zugreifen kann, einschließlich Extensible Stylesheet Language (XSL), XSL-Transformationen (XSLT) und XML Path Language (XPath). Sie müssen nicht angeben, welche Gruppe von Diensten in Verbindung mit der Anwendung genutzt werden können – beide sind verfügbar.

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

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

    Dim myDataSet As DataSet = New DataSet
    
    ' Add code here to populate the DataSet with schema and data.
    
    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(myDataSet)
    [C#]
    DataSet myDataSet = new DataSet();
    
    // Add Code here to populate the DataSet with schema and data.
    
    XmlDataDocument xmlDoc = new XmlDataDocument(myDataSet);
    
  • Sie können ein DataSet nur mit einem Schema füllen (z. B. einem DataSet mit strikter Typbindung), es mit einem XmlDataDocument synchronisieren und das XmlDataDocument anschließend aus einem XML-Dokument laden. Dadurch entsteht eine relationale Ansicht der bestehenden hierarchischen Daten. Die im DataSet-Schema enthaltenen Tabellen- und Spaltennamen müssen mit den Namen der XML-Elemente identisch sein, mit denen sie synchronisiert werden sollen. Bei diesem Prozess wird die Groß- und Kleinschreibung berücksichtigt.

    Beachten Sie, dass das Schema des DataSets nur mit den XML-Elementen übereinstimmen muss, die in der relationalen Ansicht zur Verfügung gestellt werden sollen. 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, selbst wenn das DataSet nur einen kleinen Teil davon zur Verfügung stellt. (Ein detailliertes Beispiel hierzu finden Sie unter Beispiel zum Synchronisieren eines DataSets mit einem XmlDataDocument.)

    Das folgende Codebeispiel zeigt die Schritte zum Erstellen eines DataSets, zum Füllen seines Schemas 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 zur Verfügung stellen möchten.

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

    Ein XmlDataDocument kann nicht geladen werden, 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 über ein XML-Dokument. Greifen Sie anschließend mit der DataSet-Eigenschaft von XmlDataDocument auf die relationale Ansicht der Daten zu. Sie müssen das Schema des DataSets festlegen, bevor Sie mit Hilfe des DataSets die Daten im XmlDataDocument anzeigen können. Auch hier müssen die im DataSet-Schema enthaltenen Tabellen- und Spaltennamen mit den Namen der XML-Elemente identisch sein, 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 myDataSet As DataSet = xmlDoc.DataSet
    
    ' Add code here to create the schema of the DataSet to view the data.
    
    xmlDoc.Load("XMLDocument.xml")
    [C#]
    XmlDataDocument xmlDoc = new XmlDataDocument();
    DataSet myDataSet = 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-Objekts mit einem DataSet besteht darin, dass das XML-Dokument erhalten bleibt. Wird das DataSet über ein XML-Dokument mit ReadXml gefüllt, so kann das XML-Dokument erheblich vom ursprünglichen XML-Dokument abweichen, wenn die Daten mit WriteXml als XML-Dokument zurückgeschrieben werden. Das liegt daran, dass das DataSet keine Formatierung, wie z. B. Leerräume, oder hierarchische Informationen, wie die Elementfolge, des XML-Dokuments übernimmt. Das DataSet enthält auch keine Elemente des XML-Dokuments, die aufgrund der Nichtübereinstimmung mit dem Schema des DataSets ignoriert wurden. Bei der Synchronisierung eines XmlDataDocument-Objekts mit einem DataSet werden die Formatierung und die 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 DataSets mit einem XmlDataDocument können die Ergebnisse unterschiedlich ausfallen, je nachdem, ob die DataRelation-Objekte geschachtelt sind oder nicht. Weitere Informationen hierzu finden Sie unter Geschachtelte DataRelations.

In diesem Abschnitt

Verwandte Abschnitte

  • XML und das DataSet
    Beschreibt, wie das DataSet mit XML als Datenquelle interagiert, u. a. das Laden und Erhalten des Inhalts eines DataSets als XML-Daten.
  • Geschachtelte DataRelations
    Erläutert die Bedeutung geschachtelter DataRelation-Objekte beim Darstellen des DataSet-Inhalts als XML-Daten und beschreibt die Erstellung dieser Beziehungen.
  • Erstellen und Verwenden von DataSets
    Beschreibt das DataSet und enthält Informationen zu dessen Einsatz bei der Verwaltung von Anwendungsdaten sowie zur Interaktion mit Datenquellen, einschließlich relationaler Datenbanken und XML.
  • XmlDataDocument-Klasse
    Enthält Referenzinformationen über die XmlDataDocument-Klasse.