Как я могу сохранить объект, определенный пользователем vb.net, в базе данных sql. Я не пытаюсь воспроизвести свойства с помощью столбцов. Я имею в виду что-то вроде преобразования или кодирования моего объекта в массив байтов с последующим сохранением его в поле в базе данных. Например, когда вы сохраняете экземпляр объекта в сеансе, но мне нужна информация, чтобы сохраняться после текущего сеанса.
@ Орион Эдвардс
It's not a matter of stances. It's because one day, you will change your code. Then you will try de-serialize the old object, and YOUR PROGRAM WILL CRASH.
Моя программа не будет "АВАРИЙНО", она вызовет исключение. К счастью для меня, в .net есть целый набор классов, посвященных такому случаю. В это время я обновлю свои устаревшие данные и верну их в базу данных. В этом суть этого единственного поля (или позиции, в зависимости от обстоятельств).


Вы можете использовать класс BinaryFormatter для сериализации вашего объекта в двоичный формат, а затем сохранить полученную строку в своей базе данных.
Вы можете использовать сериализация - он позволяет хранить ваш объект как минимум в 3-х формах: двоичной (подходит для BLOB), XML (используйте преимущества типа данных XML MSSQL) или просто текст (хранить в varchar или текстовом столбце)
XmlSerializer или DataContractSerializer в .NET 3.x выполнят эту работу за вас.
Прежде чем вы пойдете по этой дороге к собственному безумию, вам следует взглянуть на это (или однажды повторить):
http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx
Сохранять объекты в базе данных - не лучшая идея. Он убивает все хорошее, для чего предназначена база данных.
@aku, lomaxx и bdukes - ваши решения - это то, что я искал.
@ 1800 ИНФОРМАЦИЯ - хотя я ценю вашу позицию по этому поводу, это особый случай данных, которые я получаю от веб-сервиса, который обновляется только примерно раз в месяц. Мне не нужны данные, сохраняемые в форме db, потому что это то, для чего предназначен веб-сервис. Ниже приведен код, который я наконец-то приступил к работе.
Сериализовать
#'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)
Десериализовать
#'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)
То, что вы хотите сделать, называется «сериализацией» вашего объекта, и .Net имеет несколько различных способов сделать это. Один из них - это класс XmlSerializer в пространстве имен System.Xml.Serialization.
Другой находится в пространстве имен System.Runtime.Serialization. Он поддерживает модуль форматирования SOAP, модуль форматирования двоичных файлов и базовый класс, от которого вы можете наследовать, все они реализуют общий интерфейс.
Для того, о чем вы говорите, предложенный ранее BinaryFormatter, вероятно, будет иметь лучшую производительность.
Поддерживаю @ 1800 Информация по этому
Сериализация объектов для долгосрочного хранения - плохая идея.
while i appreciate your stance on the matter, this is a special case of data that I get from a webservice that gets refreshed only about once a month.
Дело не в стойках. Это потому, что однажды вы измените свой код. Затем вы попробуете десериализовать старый объект, и ВАША ПРОГРАММА СРАБАТСЯ.
Если он дает сбой (или вызывает исключение), все, что у вас остается, - это набор двоичных данных, которые вы можете попробовать и просеять, чтобы воссоздать ваши объекты.
Если вы сохраняете только двоичный файл, почему бы просто не сохранить его прямо на диск. Вы также можете использовать что-то вроде xml, поскольку, как уже упоминалось, если вы измените определение объекта, вы не сможете десериализовать его без некоторой тяжелой работы.