Frage

Wie kann ich ein benutzerdefiniertes vb.net-Objekt in einer SQL-Datenbank speichern?Ich versuche nicht, die Eigenschaften mit Spalten zu replizieren.Ich meine so etwas wie das Konvertieren oder Codieren meines Objekts in ein Byte-Array und das anschließende Speichern in einem Feld in der Datenbank.Zum Beispiel, wenn Sie eine Instanz eines Objekts in einer Sitzung speichern, ich aber benötige, dass die Informationen über die aktuelle Sitzung hinaus bestehen bleiben.


@Orion Edwards

Es geht nicht um die Haltung.Das liegt daran, dass Sie eines Tages Ihren Code ändern werden.Dann werden Sie versuchen, das alte Objekt zu deserialisieren, und IHR PROGRAMM WIRD ABSTURZ.

Mein Programm stürzt nicht ab, sondern löst eine Ausnahme aus.Zum Glück gibt es bei .net eine ganze Reihe von Kursen, die diesem Anlass gewidmet sind.Zu diesem Zeitpunkt werde ich meine veralteten Daten aktualisieren und sie wieder in die Datenbank einfügen.Darum geht es in diesem einen Bereich (bzw. dieser Haltung).

War es hilfreich?

Lösung

Sie können verwenden Serialisierung - Sie können Ihr Objekt in mindestens drei Formen speichern:binär (geeignet für BLOBs), XML (nutzen Sie den XML-Datentyp von MSSQL) oder einfach nur Text (in Varchar oder Textspalte speichern)

Andere Tipps

Bevor Sie diesen Weg in Richtung Ihres eigenen Wahnsinns einschlagen, sollten Sie sich Folgendes ansehen (oder es eines Tages wiederholen):

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

Das Bestehen von Objekten in einer Datenbank ist keine gute Idee.Es macht all die guten Dinge zunichte, für die eine Datenbank konzipiert ist.

Du könntest das verwenden BinaryFormatter Klasse, um Ihr Objekt in ein Binärformat zu serialisieren, und speichern Sie dann die resultierende Zeichenfolge in Ihrer Datenbank.

Der XmlSerializer oder der DataContractSerializer in .net 3.x erledigt die Arbeit für Sie.

@aku, lomaxx und bdukes – eure Lösungen sind das, wonach ich gesucht habe.

@1800 INFORMATION – Ich schätze zwar Ihre Haltung zu diesem Thema, dies ist jedoch ein Sonderfall von Daten, die ich von einem Webservice erhalte, der nur etwa einmal im Monat aktualisiert wird.Ich benötige nicht, dass die Daten in Datenbankform gespeichert bleiben, da der Webservice dafür gedacht ist.Unten ist der Code, den ich endlich zum Laufen gebracht habe.

Serialisieren

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

Deserialisieren

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

Was Sie tun möchten, nennt sich „Serialisieren“ Ihres Objekts, und .Net bietet dafür verschiedene Möglichkeiten.Eine davon ist die XmlSerializer-Klasse im System.Xml.Serialization-Namespace.

Ein anderer befindet sich im Namespace System.Runtime.Serialization.Dies unterstützt einen SOAP-Formatierer, einen binären Formatierer und eine Basisklasse, die Sie erben können und die alle eine gemeinsame Schnittstelle implementieren.

Für das, worüber Sie sprechen, wird der zuvor vorgeschlagene BinaryFormatter wahrscheinlich die beste Leistung erzielen.

Ich unterstütze @1800 Informationen zu diesem Thema.
Die Serialisierung von Objekten zur Langzeitspeicherung ist niemals eine gute Idee

Obwohl ich Ihre Haltung zu diesem Thema schätze, handelt es sich hier um einen Sonderfall von Daten, die ich von einem Webservice erhalte, der nur etwa einmal im Monat aktualisiert wird.

Es geht nicht um die Haltung.Das liegt daran, dass Sie eines Tages Ihren Code ändern werden.Dann werden Sie versuchen, das alte Objekt zu deserialisieren, und IHR PROGRAMM WIRD ABSTURZ.

Wenn es abstürzt (oder eine Ausnahme auslöst), bleibt Ihnen nur noch eine Menge Binärdaten übrig, die Sie durchsuchen müssen, um Ihre Objekte neu zu erstellen.

Wenn Sie nur die Binärdatei beibehalten, warum speichern Sie sie nicht einfach direkt auf der Festplatte?Möglicherweise möchten Sie auch etwas wie XML verwenden, da Sie, wie bereits erwähnt, Ihre Objektdefinition möglicherweise nicht ohne einige harte Arbeit deserialisieren können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top