2010-01-12 3 views
7

J'ai un DataTable rempli que je voudrais sérialiser dans un fichier pour une utilisation ultérieure. J'ai examiné les options impliquées avec cela et je me demandais si quelqu'un pouvait me diriger dans la bonne direction.sérialisation d'une base de données pour une réutilisation ultérieure

Ce que je vais créer sont deux méthodes: une pour écrire la donnée dans un fichier, et une autre pour créer une nouvelle donnée en utilisant le fichier comme entrée. Est-ce logique d'utiliser les méthodes WriteXML() et Load() pour le faire, et si oui, sur quel (s) indicateur (s) faut-il se concentrer? Merci pour les conseils. J'utilise. Net 2.0 si cela peut vous aider.

Répondre

10

Je voudrais aller pour les méthodes xml en lecture/écriture. Nous utilisons cela très bien. C'est rapide, c'est facile, c'est intégré dans le cadre.

+10

Je pense que cette réponse serait beaucoup mieux si vous avez inclus un exemple de code. Vous savez peut-être comment utiliser les méthodes XML en lecture/écriture, tout comme l'auteur de la question, mais souvenez-vous que ce site ne se contente pas d'obtenir des réponses à nos propres questions. Il s'agit de les documenter pour les autres qui rencontrent le problème. Les autres utilisateurs qui arrivent à cette question peuvent ne pas savoir comment utiliser les méthodes. –

1

Vous pouvez utiliser la technique de base de sérialisation de votre base de données dans des fichiers CSV avec en-têtes. Certains systèmes de gestion de base de données prennent en charge le chargement facile de données à partir de tels fichiers. Et au cas où votre dbms ne le ferait pas, il ne serait pas trop difficile d'écrire du code qui ferait cela pour vous. Est-ce que ça répond à votre question? À mon avis, l'inconvénient de XML est qu'il contient éventuellement plus de métadonnées que de données réelles. Dans le cas de fichiers csv, les méta-données ne sont pas répétées.

0

Le datatable est-il un objet en mémoire? Si oui, vous pouvez simplement aller avec Serialize et Deserialize Methods. Ils sont relativement rapidement et vous pouvez persister le résultat n'importe où vous voulez.

+0

De quelles méthodes Serialize et Deserialize faites-vous référence? –

+0

Vous pouvez utiliser les méthodes dans la classe System.Xml.Serialization.XmlSerializer. Je suis chez un client maintenant, mais quand j'aurai du temps, j'essaierai d'obtenir les exemples que j'ai. Ils sont assez simples à utiliser. –

+0

Bonjour, Oui, le DataTable est en mémoire. Je serais intéressé de vous voir un extrait de code, car en ce moment j'utilise ReadXml() et WriteXml(). Merci! – larryq

13

Je pense que Silveira comment signifie l'utilisation de la sérialisation binaire. Et son droit qu'il se compare très rapidement à XML dont la sérialisation est très lente comparée à binaire spécialement pour une grande quantité de données. En outre, il prend beaucoup moins d'espace sur le disque comparer à 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

L'une des insuffisances dans l'utilisation de la sérialisation binaire est que la sérialisation binaire contient un nom qualifié d'assembly de type sérialisé, donc si System.Data.dll change, vous ne pourrez pas lire les données du fichier binaire. Mais puisque DataSet et d'autres classes dans l'espace de nom fait partie de la structure et n'aime pas changer, je ne vois aucun problème dans ce cas. – affan

+0

Je n'avais d'habitude que de sérialiser de petites quantités de données, donc XMLSerializer allait bien. Mais l'essentiel ici est que nous semblons tous d'accord sur le fait que la sérialisation est un bon moyen d'avancer. Le bon formateur (XML, Binaire, DataContract), peut être choisi en fonction d'autres exigences (par exemple si vous avez seulement à lire les données dans votre application, et n'avez pas besoin de l'exporter vers un autre environnement, Binary semble le choix parfait) . –

+0

Merci pour l'astuce, Affan – larryq

7

POINT IMPORTANT:
Si vous essayez de sérialiser un objet DataTable ou un objet DataSet utilisant le formatter binaire, vous obtiendrez toujours un fichier binaire, mais il est un assez grand parce qu'il est rempli d'un tonne de données XML. Malheureusement, les données XML contenues dans les fichiers binaires permettent d'obtenir des fichiers volumineux dépourvus des avantages de portabilité et de lisibilité fournis par XML. Par la suite, la désérialisation de tels fichiers peut prendre quelques secondes et finir par occuper beaucoup plus de mémoire que nécessaire. Par conséquent, si vous choisissez une sérialisation binaire d'objets ADO.NET car vous devez obtenir une sortie plus compacte, vous échouerez. La sérialisation binaire est toujours l'approche la plus efficace, mais avec les objets ADO.NET, elle ne s'avère pas aussi efficace qu'elle le devrait.

Pour référence complète lire l'article suivant: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx

+0

Bien que ce soit une belle remarque, ce n'est pas vraiment une réponse à la question, + lien mort. – Szybki

Questions connexes