Partager via


La synchronisation du DataSet et du XmlDataDocument

Le ADO.NET DataSet vous fournit une représentation relationnelle des données. Pour l’accès hiérarchique aux données, vous pouvez utiliser les classes XML disponibles dans le .NET Framework. Historiquement, ces deux représentations de données ont été utilisées séparément. Toutefois, le .NET Framework permet un accès en temps réel et synchrone aux représentations relationnelles et hiérarchiques des données via l’objet DataSet et l’objet XmlDataDocument , respectivement.

Lorsqu’un DataSet objet est synchronisé avec un XmlDataDocument, les deux objets fonctionnent avec un seul jeu de données. Cela signifie que si une modification est apportée au DataSet, la modification est reflétée dans XmlDataDocument, et vice versa. La relation entre le DataSet et le XmlDataDocument crée une grande flexibilité en permettant à une application unique, utilisant un ensemble unique de données, d'accéder à l'ensemble des services construits autour du DataSet (comme les contrôles Web Forms et Windows Forms, et les designers de Visual Studio .NET), ainsi qu'à la suite de services XML incluant le langage de feuille de style extensible (XSL), les transformations XSL (XSLT) et le langage de chemin XML (XPath). Vous n’avez pas à choisir l’ensemble de services à cibler avec l’application ; les deux sont disponibles.

Il existe plusieurs façons de synchroniser un DataSet avec un XmlDataDocument. Vous pouvez:

  • Remplissez un DataSet schéma (autrement dit, une structure relationnelle) et des données, puis synchronisez-les avec un nouveau XmlDataDocument. Cela fournit une vue hiérarchique des données relationnelles existantes. Par exemple:

    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);
    
  • Remplissez un DataSet uniquement avec un schéma (par exemple, un DataSet fortement typé), synchronisez-le avec un XmlDataDocument, puis chargez le XmlDataDocument depuis un document XML. Cela fournit une vue relationnelle des données hiérarchiques existantes. Les noms de table et les noms de colonnes de votre DataSet schéma doivent correspondre aux noms des éléments XML avec utilisant lequel ils sont synchronisés. Cette mise en correspondance respecte la casse.

    Notez que le schéma du DataSet seul doit correspondre aux éléments XML que vous souhaitez exposer dans votre vue relationnelle. De cette façon, vous pouvez avoir un document XML très volumineux et une très petite « fenêtre » relationnelle sur ce document. Le XmlDataDocument conserve l’intégralité du document XML, bien que le DataSet n’en expose qu’une petite partie. (Pour obtenir un exemple détaillé de ce problème, consultez Synchronizing a DataSet with an XmlDataDocument.)

    L’exemple de code suivant montre les étapes pour créer un DataSet et remplir son schéma, puis le synchroniser avec un XmlDataDocument. Notez que le DataSet schéma doit uniquement correspondre aux éléments de l’objet XmlDataDocument que vous souhaitez exposer à l’aide du DataSet.

    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");
    

    Vous ne pouvez pas charger un XmlDataDocument s'il est synchronisé avec un DataSet qui contient des données. Une exception sera levée.

  • Créez-en un XmlDataDocument nouveau et chargez-le à partir d’un document XML, puis accédez à la vue relationnelle des données à l’aide de la DataSet propriété xmlDataDocument. Vous devez définir le schéma de l’élément DataSet avant de pouvoir afficher l’une des données dans XmlDataDocument à l’aide de DataSet. Là encore, les noms de table et les noms de colonnes dans votre DataSet schéma doivent correspondre aux noms des éléments XML que vous souhaitez synchroniser avec. Cette mise en correspondance respecte la casse.

    L’exemple de code suivant montre comment accéder à la vue relationnelle des données dans un XmlDataDocument.

    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");
    

Un autre avantage de synchroniser un XmlDataDocument avec un DataSet est que la fidélité d’un document XML est conservée. Si DataSet est rempli à partir d'un document XML en utilisant ReadXml, lorsque les données sont réécrites en tant que document XML en utilisant WriteXml, cela peut différer considérablement du document XML d'origine. Cela est dû au fait que la DataSet mise en forme n’est pas conservée, telle que les espaces blancs ou les informations hiérarchiques, telles que l’ordre des éléments, à partir du document XML. Il DataSet ne contient pas non plus d’éléments du document XML qui ont été ignorés, car ils ne correspondent pas au schéma du jeu de données. La synchronisation d’un XmlDataDocument avec un DataSet permet de conserver la structure d’éléments de mise en forme et hiérarchique du document XML d’origine dans XmlDataDocument, tandis que le DataSet fichier contient uniquement des données et des informations de schéma appropriées pour le DataSet.

Lors de la synchronisation d’un DataSetxmlDataDocument, les résultats peuvent différer selon que vos DataRelation objets sont imbriqués ou non. Pour plus d’informations, consultez Nesting DataRelations.

Dans cette section

Synchronisation d’un DataSet avec un XmlDataDocument Illustre la synchronisation d’un DataSet fortement typé, avec un schéma minimal, avec un XmlDataDocument.

Exécution d’une requête XPath sur un DataSet Illustre l’exécution d’une requête XPath sur le contenu d’un DataSet.

Application d’une transformation XSLT à un DataSet Illustre l’application d’une transformation XSLT au contenu d’un DataSet.

Utilisation de XML dans un DataSet Décrit comment le DataSet interagit avec XML en tant que source de données, notamment le chargement et la persistance du contenu d’un DataSet en tant que données XML.

Imbrication de DataRelations Décrit l’importance des objets imbriqués DataRelation lors de la représentation du contenu d’un DataSet en tant que données XML et décrit comment créer ces relations.

DataSets, DataTables et DataViews Décrit le DataSet et explique comment l’utiliser pour gérer les données d’application et interagir avec des sources de données, y compris les bases de données relationnelles et XML.

XmlDataDocument Contient des informations de référence sur la XmlDataDocument classe.

Voir aussi