2010-01-12 13 views
7

Tengo una DataTable llena que me gustaría serializar en un archivo para su uso posterior. Estuve revisando las opciones involucradas con esto y me pregunté si alguien podría señalarme en la dirección correcta.serialización de una tabla de datos para su posterior reutilización

Lo que crearé son dos métodos: uno para escribir la tabla de datos en un archivo y otro para crear una nueva tabla de datos usando el archivo como entrada. ¿Tiene sentido usar los métodos WriteXML() y Load() para hacer esto, y si es así, qué bandera (s) son para enfocarse? Gracias por la guía.

Estoy usando .Net 2.0 si eso ayuda.

Respuesta

10

Me gustaría ir a los métodos de lectura/escritura xml. Usamos eso bastante extensamente. Es rápido, es fácil, está integrado en el marco.

+10

Creo que esta respuesta sería mucho mejor si se incluye un ejemplo de código. Puede que sepa cómo usar los métodos XML de Lectura/Escritura, y también el autor de la pregunta, pero recuerde que este sitio es más que solo obtener respuestas a nuestras propias preguntas. Se trata de documentarlos para otros que enfrentan el problema. Es posible que otros usuarios que lleguen a esta pregunta no sepan cómo usar los métodos. –

1

Puede usar la técnica básica de serializar su base de datos en archivos CSV con encabezados. Algunos sistemas de gestión de bases de datos admiten la carga fácil de datos de dichos archivos. Y en caso de que tu dbms no lo haga, no sería muy difícil escribir algún código que hiciera esto por ti. Eso responde tu pregunta?

En mi opinión, la desventaja de xml es que contiene posiblemente más metadatos que los datos reales. En el caso de los archivos csv, los metadatos no se repiten.

0

¿La tabla de datos es un objeto en la memoria? Si es así, simplemente puede ir con Serialize y Deserialize Methods. Son relativamente rápidos y puede persistir el resultado en cualquier lugar que desee.

+0

¿A qué métodos de "Serializar" y "Deserializar" se está refiriendo? –

+0

Puede usar los métodos dentro de la clase System.Xml.Serialization.XmlSerializer. Ahora estoy en un cliente, pero cuando tenga algo de tiempo, trataré de obtener los ejemplos que tengo. Son bastante simples de usar. –

+0

Hola, Sí, la DataTable está en la memoria. Me interesaría verte fragmento de código, ya que ahora estoy usando ReadXml() y WriteXml(). ¡Gracias! – larryq

13

Creo que Silveira comment significa uso de serialización binaria. Y es justo que sea muy rápido en comparación con XML, cuya serialización es muy lenta en comparación con el binario especialmente para una gran cantidad de datos. También se necesita mucho menos espacio en disco que 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 de las deficiencias en el uso de la serialización binaria es que la serialización binaria contiene el nombre calificado del ensamblado del tipo que se serializó, por lo que si System.Data.dll cambia no podrá leer los datos del archivo binario. Pero dado que DataSet y otras clases en el espacio de nombres son parte del framework y no les gusta cambiar, entonces no veo ningún problema en este caso. – affan

+0

Normalmente solo tenía que serializar pequeñas cantidades de datos, por lo que XMLSerializer estaba bien. Pero la conclusión es que todos parecemos estar de acuerdo en que la serialización es un buen camino a seguir. El formateador correcto (XML, Binary, DataContract) puede elegirse dependiendo de otros requisitos (por ejemplo, si solo tiene que leer los datos de su aplicación y no necesita exportarlos a otro entorno, Binary parece ser la opción perfecta) . –

+0

Gracias por la sugerencia, Affan – larryq

7

punto importante:
Si se intenta serializar un objeto DataTable o un objeto DataSet usando el formateador binario, usted seguirá recibiendo un archivo binario, pero es bastante grande ya que está lleno de una tonelada de datos XML. Desafortunadamente, los datos XML en archivos binarios crean enormes archivos que carecen de las ventajas de portabilidad y legibilidad que proporciona XML. Posteriormente, la deserialización de dichos archivos puede tardar unos segundos en completarse y terminar ocupando mucha más memoria de la que realmente se necesita. Como resultado, si elige una serialización binaria de objetos ADO.NET porque necesita obtener una salida más compacta, , fallará. La serialización binaria sigue siendo el enfoque más eficaz desde el punto de vista del espacio, pero con los objetos ADO.NET no resulta tan efectivo como debería.

Para tener una referencia completa de leer el siguiente artículo: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx

+0

Si bien es un buen comentario, en realidad no es la respuesta a la pregunta, + enlace muerto. – Szybki

Cuestiones relacionadas