Pregunta

Cómo se puede ir sobre el almacenamiento de un vb.net definido por el usuario de objetos en una base de datos sql.No estoy tratando de replicar las propiedades con las columnas.Me refiero a algo a lo largo de las líneas de la conversión de la codificación o de mi objeto de matriz de bytes y, a continuación, almacenar que en un campo en la db.Como al almacenar una instancia de un objeto en la sesión, pero necesito la info para persistir después de la sesión actual.


@Orion Edwards

No es una cuestión de actitudes.Es porque un día, usted va a cambiar su código.A continuación, pruebe de serializar el objeto antiguo, y SU PROGRAMA SE bloqueará.

Mi Programa no va a "CRASH", se generará una excepción.Por suerte para mí .net tiene un conjunto de clases dedicadas para tal ocasión.Momento en el que voy a actualizar mis datos obsoletos y poner de nuevo en la db.Ese es el punto de este campo (o percepción, según sea el caso).

¿Fue útil?

Solución

Puede utilizar la serialización - que le permite almacenar su objeto, al menos, en 3 formas:binario (adecuado para Blob), XML (tomar ventaja de MSSQL del tipo de datos XML) o sólo texto plano (tienda en varchar o columna de texto)

Otros consejos

Antes de ir por este camino hacia su propia eventual locura, usted debe echar un vistazo a esto (o un día a repetir):

http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx

La persistencia de objetos en una base de datos no es una buena idea.Mata a todas las cosas buenas que una base de datos está diseñado para hacer.

Usted podría utilizar la BinaryFormatter clase para serializar el objeto a un formato binario, a continuación, guardar la cadena resultante en la base de datos.

La clase XmlSerializer o el DataContractSerializer en .net 3.x va a hacer el trabajo para usted.

@aku, lomaxx y bdukes - sus soluciones son lo que yo estaba buscando.

@1800 INFORMACIÓN - aunque aprecio su postura sobre el asunto, este es un caso especial de datos que tengo de un webservice que se actualiza sólo una vez al mes.No necesito los datos persistió en db forma porque eso es lo que el webservice es para.A continuación está el código que finalmente se puso a trabajar.

Serializar

    #'res is my object to serialize
    Dim xml_serializer As System.Xml.Serialization.XmlSerializer
    Dim string_writer As New System.IO.StringWriter()
    xml_serializer = New System.Xml.Serialization.XmlSerializer(res.GetType)
    xml_serializer.Serialize(string_writer, res)

Deserializar

    #'string_writer and xml_serializer from above
    Dim serialization As String = string_writer.ToString
    Dim string_reader As System.IO.StringReader
    string_reader = New System.IO.StringReader(serialization)
    Dim res2 As testsedie.EligibilityResponse
    res2 = xml_serializer.Deserialize(string_reader)

Lo que quieres hacer se llama "Serialización" de su objeto, y .Net tiene un par de maneras diferentes de hacerlo.Uno es la clase XmlSerializer en el Sistema.Xml.La serialización de espacio de nombres.

La otra está en el Sistema.En tiempo de ejecución.La serialización de espacio de nombres.Este tiene soporte para un JABÓN formateador, un formateador binario, y una base de clase puede heredar de que implementan una interfaz común.

Para lo que están hablando, la BinaryFormatter sugeridas serán probablemente tenga el mejor rendimiento.

Estoy respaldo de @1800 Información sobre este.
Serialización de objetos para el almacenamiento a largo plazo no es una buena idea

aunque aprecio su postura sobre el asunto, este es un caso especial de datos que tengo de un webservice que se actualiza sólo una vez al mes.

No es una cuestión de actitudes.Es porque un día, usted va a cambiar su código.A continuación, pruebe de serializar el objeto antiguo, y SU PROGRAMA SE bloqueará.

Si se bloquea (o lanza una excepción) todo lo que queda es un montón de datos binarios para probar y tamizar a través de recrear los objetos.

Si sólo la persistencia binario, ¿por qué no guardar directamente en el disco.Usted también puede buscar en el uso de algo como xml, como se ha mencionado, si modifica su definición de objeto puede no ser capaz de unserialise sin un poco de trabajo duro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top