In uno scorso articolo abbiamo visto come caricare in memoria un file XML attraverso la classe DataSet della piattaforma Microsoft .NET, questa volta vedremo il processo inverso, la creazione di una struttura dati a partire dal DataSet. I metodi chiave che consentono di caricare e salvare uno stream XML in un DataSet sono:
Ognuno di questi metodi ha diversi overload che permettono di utilizzare diversi parametri per realizzare le operazioni di scrittura e lettura. Vediamo un esempio pratico in linguaggio C#:
using System; using System.Data; namespace BaseApp { class Program { static void Main(string[] args) { Console.WriteLine("Mi appresto a scrivere il file XML"); DataSet ds = new DataSet(); // Aggiungo le tabelle ds.Tables.Add("Ordini"); ds.Tables.Add("Dettagli"); // Inserisco i campi DataColumn dc = new DataColumn("IDOrdine", Type.GetType("System.Int32")); dc.ColumnMapping = MappingType.Attribute; ds.Tables["Ordini"].Columns.Add(dc); dc = new DataColumn("Numero", Type.GetType("System.String")); dc.ColumnMapping = MappingType.Attribute; ds.Tables["Ordini"].Columns.Add(dc); dc = new DataColumn("Data", Type.GetType("System.DateTime")); dc.ColumnMapping = MappingType.Attribute; ds.Tables["Ordini"].Columns.Add(dc); dc = new DataColumn("IDDettaglio", Type.GetType("System.Int32")); dc.AutoIncrement = true; dc.AutoIncrementStep = 1; dc.ColumnMapping = MappingType.Hidden; ds.Tables["Dettagli"].Columns.Add(dc); dc = new DataColumn("IDOrdine", Type.GetType("System.Int32")); dc.ColumnMapping = MappingType.Attribute; ds.Tables["Dettagli"].Columns.Add(dc); dc = new DataColumn("Descrizione", Type.GetType("System.String")); dc.ColumnMapping = MappingType.Attribute; ds.Tables["Dettagli"].Columns.Add(dc); dc = new DataColumn("Qt", Type.GetType("System.Double")); dc.ColumnMapping = MappingType.Attribute; ds.Tables["Dettagli"].Columns.Add(dc); // Creiamo la relazione DataRelation dr = new DataRelation("Ordini_Dettagli", ds.Tables["Ordini"].Columns["IDOrdine"], ds.Tables["Dettagli"].Columns["IDordine"]); dr.Nested = true; ds.Relations.Add(dr); // Inserisco qualche valore DataRow ndr = ds.Tables["Ordini"].NewRow(); ndr["IDOrdine"] = 1; ndr["Numero"] = "12/A"; ndr["Data"] = "09/11/2010"; ds.Tables["Ordini"].Rows.Add(ndr); ndr = ds.Tables["Dettagli"].NewRow(); ndr["IDOrdine"] = 1; ndr["Descrizione"] = "Solvente liquido"; ndr["Qt"] = 15.54; ds.Tables["Dettagli"].Rows.Add(ndr); ndr = ds.Tables["Dettagli"].NewRow(); ndr["IDOrdine"] = 1; ndr["Descrizione"] = "Calce idrata"; ndr["Qt"] = 14.54; ds.Tables["Dettagli"].Rows.Add(ndr); ds.WriteXml("Ordini.xml"); ds.WriteXmlSchema("Ordini_Schema.xsd"); ds.Dispose(); Console.WriteLine("\n\nHo scritto il file XML ed il suo schema"); Console.WriteLine("\n\nPremi un tasto per uscire..."); Console.ReadKey(); } } }
In questo blocco di codice abbiamo creato due tabelle “Ordini” e “Dettagli” ed abbiamo inserito alcuni campi, penso si capisca bene dal codice. Tra le due tabelle abbiamo creato una relazione e poi abbiamo inserito alcuni valori. Da notare che sulle colonne viene impostato il ColumnMapping di tipo Attribute, questo significa in caso di salvataggio in XML i campi relativi alle colonne si trasformeranno in attributi degli elementi nidificati. La relazione viene impostata a Nested che ci permette di indicare al DataSet che in caso di serializzazione in XML le righe della tabella Dettagli diventano elementi nidificati di Ordini. Al termine salviamo il tutto in un file XML ed in uno dello schema. Nei prossimi articoli su ADO.NET vedremo come inviare questi dati ad un data provider.
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→