Puis-je enregistrer un "Objet" dans une base de données SQL Server?
Je veux enregistrer un objet (de tout type) dans un champ dans une base de données dans SQL Server 2005. Est-il possible? Dois-je convertir l'objet en quelque chose, comme un tableau d'octets, par exemple, et de le jeter en arrière quand la récupérer?
- Vous pouvez également sérialiser pour le XML, ce qui serait plus facile à inspecter l'intérieur de la db que des données binaires
- Ce n'est pas un grand DB design. Aurez-vous besoin d'interroger les attributs de l'objet à tout moment? par exemple, obtenir tous les objets, où l'objet.Foo = 1.
- Non je n'ai pas besoin de savoir ou d'une requête le contenu des tables stockées
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
VARBINARY(MAX)
type de champ dans SQL Server, si vous le souhaitez. Vous pouvez stocker n'importe quel type d'objet, de là, jusqu'à 2 GO en taille.Pour y accéder, vous pouvez utiliser ADO.NET - quelque chose comme cela:
Marc
Je voudrais utiliser JSON pour convertir l'objet en chaîne de caractères et la stocker dans un VARCHAR ou un champ de TEXTE. Non seulement les données sont stockées dans un format lisible par l'homme, mais il est également lisible à partir de différentes langues, depuis à peu près chaque langue dominante a un parser JSON disponibles.
Le lien que j'ai posté a des liens vers plusieurs bibliothèques dans de nombreuses langues (dont le C#), j'ai utilisé cette une une couple de fois dans le passé.
Comme d'autres l'ont dit, la sérialisation peut être la clé ici (en supposant que vous ne souhaitez pas utiliser l'ORM pour stocker les propriétés des colonnes dans une table, qui semble beaucoup plus directe).
Quelques mises en garde; une base de données est:
En tant que tel, vous ne pas souhaitez utiliser toute la sérialisation technique qui est une plate-forme spécifique ou spécifique à la version. Vous verrez souvent des gens parler
BinaryFormatter
pour la persistance, mais cela tombe dans les deux pièges. Vous serait saborder si vous avez déjà changé de plate-forme, ou même si vous venez de modifier certaines propriétés.Vous avez besoin d'une mise en œuvre indépendante de l'approche la plus simple (qui conserve également la capacité d'être lisible par un humain) est xml ou json, peut-être via
XmlSerializer
ou Json.NET (stockées dans un[n]varchar(max)
). Si vous ne se soucient pas lisible par l'homme, "protocol buffer" (rapide/binaire) feraient bien (stockées dans unvarbinary(max)
), et est disponible pour la plupart des plates-formes (notamment en C#/.NET/etc).Voici un exemple si vous êtes en utilisant Entity Framework (EF):
Et c'est la façon de dé-sérialiser l'objet:
Pour ce faire vous avez besoin de sérialiser l'objet.
Vous pouvez consulter ici des exemples:
http://www.c-sharpcorner.com/UploadFile/bipinjoshi/serializingObjectsinCS11102005234746PM/serializingObjectsinCS.aspx