Domanda

Come posso archiviare un oggetto definito dall'utente vb.net in un database SQL.Non sto cercando di replicare le proprietà con le colonne.Intendo qualcosa sulla falsariga di convertire o codificare il mio oggetto in un array di byte e quindi memorizzarlo in un campo nel db.Come quando memorizzi un'istanza di un oggetto in una sessione, ma ho bisogno che le informazioni persistano oltre la sessione corrente.


@Orion Edwards

Non è una questione di posizioni.È perché un giorno cambierai il tuo codice.Quindi proverai a deserializzare il vecchio oggetto e IL TUO PROGRAMMA ANDRÀ IN CRASH.

Il mio programma non andrà in "CRASH", genererà un'eccezione.Fortunatamente per me .net ha tutta una serie di lezioni dedicate a un'occasione del genere.A quel punto aggiornerò i miei dati obsoleti e li rimetterò nel db.Questo è il punto di questo campo (o posizione, a seconda dei casi).

È stato utile?

Soluzione

Puoi usare serializzazione - ti permette di conservare il tuo oggetto almeno in 3 forme:binario (adatto per BLOB), XML (sfrutta il tipo di dati XML di MSSQL) o semplicemente testo (memorizza in varchar o colonna di testo)

Altri suggerimenti

Prima di intraprendere questa strada verso la tua eventuale follia, dovresti dare un'occhiata a questo (o ripeterlo un giorno):

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

Mantenere gli oggetti in un database non è una buona idea.Uccide tutte le cose buone per cui un database è progettato.

Potresti usare il BinaryFormatter class per serializzare il tuo oggetto in un formato binario, quindi salva la stringa risultante nel tuo database.

XmlSerializer o DataContractSerializer in .net 3.x faranno il lavoro per te.

@aku, lomaxx e bdukes: le tue soluzioni sono ciò che stavo cercando.

@ 1800 INFORMAZIONI - anche se apprezzo la tua posizione in merito, questo è un caso speciale di dati che ottengo da un servizio web che viene aggiornato solo circa una volta al mese.Non ho bisogno che i dati persistano in formato DB perché è a questo che serve il servizio web.Di seguito è riportato il codice che finalmente ho potuto lavorare.

Serializzare

    #'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)

Deserializzare

    #'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)

Quello che vuoi fare si chiama "Serializzare" il tuo oggetto e .Net ha diversi modi per farlo.Una è la classe XmlSerializer nello spazio dei nomi System.Xml.Serialization.

Un altro si trova nello spazio dei nomi System.Runtime.Serialization.Supporta un formattatore SOAP, un formattatore binario e una classe base da cui puoi ereditare che implementano tutti un'interfaccia comune.

Per quello di cui stai parlando, il BinaryFormatter suggerito in precedenza avrà probabilmente le migliori prestazioni.

Sto sostenendo @ 1800 Informazioni su questo.
Serializzare oggetti per l'archiviazione a lungo termine non è mai una buona idea

anche se apprezzo la tua posizione in merito, questo è un caso speciale di dati che ottengo da un servizio web che viene aggiornato solo circa una volta al mese.

Non è una questione di posizioni.È perché un giorno cambierai il tuo codice.Quindi proverai a deserializzare il vecchio oggetto e IL TUO PROGRAMMA ANDRÀ IN CRASH.

Se si blocca (o genera un'eccezione) tutto ciò che rimane è un mucchio di dati binari da provare a vagliare per ricreare i tuoi oggetti.

Se stai persistendo solo in binario, perché non salvarlo direttamente su disco.Potresti anche prendere in considerazione l'utilizzo di qualcosa come xml poiché, come è stato menzionato, se modifichi la definizione dell'oggetto potresti non essere in grado di annullarne la serializzazione senza un duro lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top