2010-01-12 4 views
7

Ho un DataTable popolato che desidero serializzare su un file per un uso successivo. Ho esaminato le opzioni coinvolte e mi sono chiesto se qualcuno potesse indicarmi la giusta direzione.serializzazione di un datatable per riutilizzo successivo

Quello che creerò sono due metodi: uno per scrivere il datatable in un file e l'altro per la creazione di un nuovo datatable utilizzando il file come input. Ha senso usare i metodi WriteXML() e Load() per fare ciò, e se sì, quali flag sono quelli su cui concentrarsi? Grazie per la guida.

Sto usando. NET 2.0 se questo aiuta.

risposta

10

Vorrei andare per i metodi di lettura/scrittura xml. Lo usiamo abbastanza estesamente. È veloce, è facile, è integrato nel framework.

+10

Penso che questa risposta sarebbe molto meglio se hai incluso un esempio di codice. Potresti sapere come usare i metodi di lettura/scrittura XML, e quindi anche l'autore della domanda, ma ricorda che questo sito non è solo una risposta alle nostre domande. Si tratta di documentarli per gli altri che incontrano il problema. Gli altri utenti che arrivano a questa domanda potrebbero non sapere come usare i metodi. –

1

È possibile utilizzare la tecnica di base della serializzazione del database in file CSV con intestazioni. Alcuni sistemi di gestione del database supportano il facile caricamento dei dati da tali file. E nel caso in cui il tuo dbms non lo farebbe, non sarebbe troppo difficile scrivere del codice che farebbe questo per te. Questo risponde alla tua domanda?

A mio parere lo svantaggio di xml è che contiene possibilmente più metadati dei dati effettivi. In caso di file CSV i metadati non vengono ripetuti.

0

L'oggetto datatable è in memoria? In tal caso, potresti semplicemente utilizzare i metodi Serialize e Deserialize. Sono relativamente veloci e puoi persistere il risultato ovunque tu voglia.

+0

A quali metodi di 'Serialize' e' Deserialize' si riferisce? –

+0

È possibile utilizzare i metodi nella classe System.Xml.Serialization.XmlSerializer. Sono a un cliente ora, ma quando avrò un po 'di tempo, cercherò di ottenere gli esempi che ho. Sono abbastanza semplici da usare. –

+0

Ciao, Sì, il DataTable è in memoria. Sarei interessato a vederti snippet di codice, dato che adesso sto usando ReadXml() e WriteXml(). Grazie! – larryq

13

Penso che Silveira comment significhi uso della serializzazione binaria. E 'giusto che sia molto veloce rispetto all'XML che la serializzazione è molto lenta rispetto al binario specialmente per una grande quantità di dati. Inoltre ci vuole molto meno spazio sul disco rispetto a XML.

public static void Serialize(DataSet ds, Stream stream) { 
     BinaryFormatter serializer = new BinaryFormatter(); 
     serializer.Serialize(stream, ds); 
    } 

    public static DataSet Deserialize(Stream stream) { 
     BinaryFormatter serializer = new BinaryFormatter(); 
     return (DataSet)serializer.Deserialize(stream); 
    } 
+0

Una delle carenze nell'utilizzo della serializzazione binaria è che la serializzazione binaria contiene il nome di assembly qualificato di tipo serializzato, quindi se System.Data.dll cambia non sarà possibile leggere i dati dal file binario. Ma poiché DataSet e altre classi nello spazio dei nomi sono parte del framework e non mi piace cambiare, non vedo alcun problema in questo caso. – affan

+0

Di solito dovevo solo serializzare piccole quantità di dati, quindi XMLSerializer andava bene. Ma la linea di fondo qui è che sembriamo tutti d'accordo sul fatto che la serializzazione sia un buon modo per andare avanti. Il giusto formattatore (XML, Binary, DataContract), può essere scelto in base ad altri requisiti (ad esempio, se devi solo leggere i dati all'interno della tua app e non è necessario esportarlo in un altro ambiente, Binary sembra la scelta perfetta) . –

+0

Grazie per il suggerimento, Affan – larryq

7

PUNTO IMPORTANTE:
Se si tenta di serializzare un oggetto DataTable o un oggetto di DataSet utilizzando il formattatore binario, si continua a ottenere un file binario, ma è abbastanza grande perché è riempito con un tonnellate di dati XML. Sfortunatamente, i dati XML in file binari creano file enormi privi della portabilità e dei vantaggi di leggibilità offerti da XML. Successivamente, la deserializzazione di questi file potrebbe richiedere alcuni secondi e finire per occupare molta più memoria del necessario. Di conseguenza, se si sceglie una serializzazione binaria di oggetti ADO.NET perché è necessario ottenere un output più compatto, non si riuscirà a. La serializzazione binaria è ancora l'approccio più efficiente dal punto di vista spaziale, ma con gli oggetti ADO.NET non si dimostra così efficace come dovrebbe.

Per riferimento Completa leggere il seguente articolo: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx

+0

Mentre è una bella annotazione, non è proprio la risposta alla domanda, + link dead. – Szybki