Sincronizzazione di un DataSet con un XmlDataDocument

Il DataSet di ADO.NET fornisce una rappresentazione relazionale dei dati. Per un accesso gerarchico ai dati, è possibile utilizzare le classi XML disponibili in .NET Framework. Questi due tipi di rappresentazione dei dati sono sempre stati utilizzati separatamente. .NET Framework consente tuttavia l'accesso sincrono, in tempo reale sia alla rappresentazione relazionale che alla rappresentazione gerarchica dei dati mediante l'oggetto DataSet e l'oggetto XmlDataDocument rispettivamente.

Quando un DataSet viene sincronizzato con un XmlDataDocument, entrambi gli oggetti utilizzano un unico insieme di dati. Se una modifica viene apportata nel DataSet, tale modifica verrà quindi riflessa nell'oggetto XmlDataDocument e viceversa. La relazione tra DataSet e XmlDataDocument fornisce una notevole flessibilità, consentendo a una singola applicazione, che utilizza un singolo insieme di dati, di accedere all'intero gruppo di servizi creati per il DataSet (ad esempio i controlli Web Form e Windows Form e le soluzioni di progettazione di Visual Studio .NET), oltre al gruppo di servizi XML, inclusi XSL (Extensible Stylesheet Language), XSLT (XSL Transformation) e XPath (XML Path Language). Non è necessario stabilire il gruppo di servizi a cui è destinata l'applicazione, poiché sono entrambi disponibili.

Per sincronizzare un DataSet e un oggetto XmlDataDocument sono disponibili numerose modalità: È possibile:

  • Compilare un DataSet con uno schema (struttura relazionale) e con dati, quindi sincronizzarlo con un nuovo oggetto XmlDataDocument. In questo modo si otterrà una visualizzazione gerarchica dei dati relazionali esistenti. Esempio:

    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);
    
  • Compilare un DataSet solo con lo schema (come nel caso di un DataSet tipizzato in modo sicuro), sincronizzarlo con un oggetto XmlDataDocument, quindi caricare l'oggetto XmlDataDocument da un documento XML. In questo modo si otterrà una visualizzazione relazionale dei dati gerarchici esistenti. È necessario che i nomi di tabella e di colonna presenti nello schema del DataSet corrispondano ai nomi degli elementi XML con cui si desidera che siano sincronizzati. Questo tipo di associazione prevede la distinzione tra maiuscole e minuscole.

    Si noti che è necessario che nello schema del DataSet siano presenti corrispondenze solo agli elementi XML che si desidera esporre nella visualizzazione relazionale. È quindi possibile disporre di un documento XML di grandi dimensioni e di una "finestra" relazionale molto piccola su tale documento. Nell'oggetto XmlDataDocument viene conservato l'intero documento XML, anche se solo una piccola parte di tale documento viene esposta dal DataSet. Per un esempio dettagliato, vedere Esempio di sincronizzazione di un DataSet con un XmlDataDocument.

    Nell'esempio di codice seguente vengono illustrati i passaggi per la creazione di un DataSet e la compilazione dello schema di tale DataSet, quindi per la sincronizzazione del DataSet con un XmlDataDocument. Si noti che è necessario che nello schema del DataSet siano presenti corrispondenze solo agli elementi del XmlDataDocument che si desidera esporre mediante il DataSet.

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

    Non è possibile caricare un XmlDataDocument se tale oggetto è sincronizzato con un DataSet contenente dati. Verrà generata un'eccezione.

  • Creare un nuovo XmlDataDocument e caricarlo da un documento XML, quindi accedere alla visualizzazione relazionale dei dati mediante la proprietà DataSet dell'oggetto XmlDataDocument. Prima di visualizzare i dati dell'oggetto XmlDataDocument tramite DataSet, è necessario impostare lo schema del DataSet. Anche in questo caso è necessario che i nomi di tabella e di colonna presenti nello schema del DataSet corrispondano ai nomi degli elementi XML con cui si desidera che siano sincronizzati. Questo tipo di associazione prevede la distinzione tra maiuscole e minuscole.

    Nell'esempio di codice seguente viene illustrata la modalità di accesso alla visualizzazione relazionale dei dati in un oggetto XmlDataDocument.

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

La sincronizzazione di un oggetto XmlDataDocument con un DataSet risulta vantaggiosa anche perché consente di mantenere la fedeltà al documento XML. Se il DataSet viene compilato da un documento XML mediante ReadXml, quando i dati vengono riscritti come documento XML mediante WriteXml è possibile che siano presenti differenze notevoli rispetto al documento XML originale. Nel DataSet infatti non viene conservata la formattazione, ad esempio gli spazi, o le informazioni gerarchiche, quale l'ordine degli elementi, del documento XML. Nel DataSet non sono inoltre contenuti gli elementi del documento XML che sono stati ignorati in quanto non corrispondenti allo schema del Dataset. La sincronizzazione di un oggetto XmlDataDocument con un DataSet consente di mantenere la formattazione e la struttura gerarchica degli elementi del documento XML originale nell'oggetto XmlDataDocument, mentre nel DataSet sono contenuti solo i dati e le informazioni appropriate per il DataSet.

Quando si sincronizza un DataSet con un XmlDataDocument, si possono ottenere risultati differenti a seconda della nidificazione o meno degli oggetti DataRelation. Per ulteriori informazioni, vedere Oggetti DataRelation nidificati.

In questa sezione

Sezioni correlate

  • XML e il DataSet
    Viene descritta l'interazione del DataSet con XML come origine dati, inclusi il caricamento e il mantenimento dei contenuti di un DataSet sotto forma di dati XML.
  • Oggetti DataRelation nidificati
    Viene illustrata l'importanza degli oggetti DataRelation nidificati per la rappresentazione dei contenuti di un DataSet sotto forma di dati XML e ne viene descritta la creazione.
  • Creazione e utilizzo di DataSet
    Viene descritto il DataSet e il relativo utilizzo per la gestione dei dati dell'applicazione e per l'interazione con origini dati che includono database relazionali e XML.
  • Classe XmlDataDocument
    Vengono fornite informazioni di riferimento relative alla classe XmlDataDocument.