Question

Comment puis-je stocker un objet défini par l'utilisateur vb.net dans une base de données SQL.Je n'essaie pas de reproduire les propriétés avec des colonnes.Je veux dire quelque chose comme la conversion ou l'encodage de mon objet en un tableau d'octets, puis son stockage dans un champ de la base de données.Comme lorsque vous stockez une instance d'un objet en session, mais j'ai besoin que les informations persistent au-delà de la session en cours.


@Orion Edwards

Ce n'est pas une question de positions.C'est parce qu'un jour, tu changeras ton code.Ensuite, vous essaierez de désérialiser l’ancien objet et VOTRE PROGRAMME CRASH.

Mon programme ne "CRASH", il lèvera une exception.Heureusement pour moi, .net propose tout un ensemble de cours dédiés à une telle occasion.À ce moment-là, je rafraîchirai mes données obsolètes et les remettrai dans la base de données.C’est le but de ce champ (ou de cette position, selon le cas).

Était-ce utile?

La solution

Vous pouvez utiliser sérialisation - il vous permet de stocker votre objet au moins sous 3 formes :binaire (adapté aux BLOB), XML (profitez du type de données XML de MSSQL) ou simplement du texte brut (stockez dans varchar ou dans une colonne de texte)

Autres conseils

Avant de vous engager sur cette voie vers votre propre folie éventuelle, vous devriez jeter un œil à ceci (ou le répéter un jour) :

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

Persister des objets dans une base de données n'est pas une bonne idée.Cela tue toutes les bonnes choses pour lesquelles une base de données est conçue.

Vous pourriez utiliser le Formateur binaire class pour sérialiser votre objet au format binaire, puis enregistrez la chaîne résultante dans votre base de données.

Le XmlSerializer ou le DataContractSerializer dans .net 3.x feront le travail à votre place.

@aku, lomaxx et bdukes - vos solutions sont ce que je cherchais.

@1800 INFORMATION - bien que j'apprécie votre position sur la question, il s'agit d'un cas particulier de données que je reçois d'un service Web qui n'est actualisé qu'environ une fois par mois.Je n'ai pas besoin que les données soient conservées sous forme de base de données car c'est à cela que sert le service Web.Vous trouverez ci-dessous le code sur lequel j'ai finalement pu travailler.

Sérialiser

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

Désérialiser

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

Ce que vous voulez faire s'appelle "Sérialiser" votre objet, et .Net propose différentes manières de procéder.L’une est la classe XmlSerializer dans l’espace de noms System.Xml.Serialization.

Un autre se trouve dans l’espace de noms System.Runtime.Serialization.Celui-ci prend en charge un formateur SOAP, un formateur binaire et une classe de base dont vous pouvez hériter et qui implémentent tous une interface commune.

Pour ce dont vous parlez, le BinaryFormatter suggéré précédemment aura probablement les meilleures performances.

Je soutiens @1800 Informations sur celui-ci.
Sérialiser des objets pour un stockage à long terme n'est jamais une bonne idée

bien que j'apprécie votre position sur la question, il s'agit d'un cas particulier de données que je reçois d'un service Web qui n'est actualisé qu'environ une fois par mois.

Ce n'est pas une question de positions.C'est parce qu'un jour, tu changeras ton code.Ensuite, vous essaierez de désérialiser l’ancien objet et VOTRE PROGRAMME CRASH.

S'il plante (ou lève une exception), il ne vous reste plus qu'un tas de données binaires à essayer de parcourir pour recréer vos objets.

Si vous persistez uniquement en binaire, pourquoi ne pas simplement enregistrer directement sur le disque.Vous voudrez peut-être également envisager d'utiliser quelque chose comme XML car, comme cela a été mentionné, si vous modifiez la définition de votre objet, vous ne pourrez peut-être pas le désérialiser sans un travail acharné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top