Categories: C# (sharp)Database

La Classe DataSet per Leggere File XML

Nello scorso articolo sulla connessione ai dati secondo ADO.NET, abbiamo detto che con la classe DataSet è possibile gestire una vera e propria cache disconnessa che può contenere viste provenienti da fonti diverse, questa classe è quindi un mini-database in memoria che consente di gestire  e rappresentare le informazioni sia in XML che con una vista relazionale. Il modello ad oggetti del DataSet è costituito da una serie di collezioni di oggetti nidificati. La collezione delle Tables (DataTable) al cui interno troviamo Rows (DataRow), Columns (DataColumn) e Constraints (Constraint) consentono di navigare in un DataSet, inserire, modificare ed eliminare i dati, in particolare i Constraints sono oggetti che rappresentano le regole di validazione per l’inserimento dei dati nelle Tables, in base ad eventuali chiavi interne o esterne impostate sulla tabella. Oltre alle Tables nel DataSet troviamo un’altra importante collezione, si tratta di Relations (DataRelation) che rappresentano le relazioni stabilite tra le tabelle presenti nel DataSet.
Abbiamo detto che in un DataSet possiamo caricare o salvare il contenuto anche attraverso Stream XML, siano essi file, stream in memoria o di rete. Vediamo quindi un esempio concreto nel quale caricheremo i dati da un file XML utilizzando gli oggetti forniti da DataSet. Come prima operazione da fare è creare un file XML contenente ad esempio i nostri clienti, inventati:

<?xml version="1.0" encoding="utf-8"?>
<Clienti>
  <Cliente IDCliente="1" RagSoc="De Tommasi Inventato Snc">
    <Ordine IDOrdine="1" IDCliente="1" Data="01/05/2010"></Ordine>
    <Ordine IDOrdine="2" IDCliente="1" Data="07/08/2010"></Ordine>
    <Ordine IDOrdine="3" IDCliente="1" Data="03/04/2010"><Ordine>
  </Cliente>
  <Cliente IDCliente="2" RagSoc="Testing Consulting Srl">
    <Ordine IDOrdine="1" IDCliente="2" Data="06/06/2010"></Ordine>
    <Ordine IDOrdine="2" IDCliente="2" Data="12/07/2010"></Ordine>
    <Ordine IDOrdine="3" IDCliente="2" Data="15/11/2010"></Ordine>
  </Cliente>
  <Cliente IDCliente="3" RagSoc="Prova Test Spa">
    <Ordine IDOrdine="1" IDCliente="3" Data="14/03/2010"></Ordine>
    <Ordine IDOrdine="2" IDCliente="3" Data="22/08/2010"></Ordine>
    <Ordine IDOrdine="3" IDCliente="3" Data="28/11/2010"></Ordine>
   </Cliente>
</Clienti>

Successivamente creiamo il programma console in C# per caricare questo file XML:

using System;
using System.Data;

namespace BaseApp
{
 class Program
 {
   static void Main(string[] args)
   {
      Console.WriteLine("Mi appresto a caricare il file XML");

      DataSet ds = new DataSet();
      ds.ReadXml("Clienti.xml");

      Console.WriteLine("Ho caricato il file XML e leggo le tabelle...");

      foreach (DataTable dt in ds.Tables)
      {
         Console.WriteLine("\n\nLeggo le righe della tabella: {0}...\n",
                    dt.TableName);
         foreach (DataRow dr in ds.Tables[dt.TableName].Rows)
         {
           if (dt.TableName == "Cliente")
              Console.WriteLine("{0}", dr["RagSoc"].ToString());
           else
              Console.WriteLine("{0}", dr["Data"].ToString());
          }
      }
      ds.Dispose();

      Console.WriteLine("\n\nPremi un tasto per terminare...");
      Console.ReadKey();
    }
 }
}

Il codice mostrato è molto semplice e visualizza perfino come iterare sulle collezioni di tabelle. Abbiamo istanziato una variabile DataSet che consente con una semplice funzione di leggere il contenuto di un file XML, da qui si nota la completa integrazione tra il DataSet ed i file in questo formato universalmente riconosciuto per trasferire dati tramite rete, per poi iterare le collezioni di tabelle e righe che non sono altro che i campi stessi. Al termine chiudo il tutto con la funzione Dispose().
In un prossimo articolo vedremo come inserire nuove righe nelle tabelle e come modificare quelle esistenti, per poi spiegare come crearne di nuove al volo in formato XML con la creazione anche dello schema. Per qualsiasi problema o domanda potete iscrivervi al nostro forum.

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Recent Posts

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

10 mesi ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

11 mesi ago

Mettere il PC in Lock Screen

In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…

3 anni ago

Fare il reset togliendo la corrente

In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…

3 anni ago

Prossimi Aggiornamenti Software

Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…

3 anni ago

Come Eliminare i Files in Windows

Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→

3 anni ago