объект vb.net сохранен в базе данных - PullRequest
1 голос
/ 03 сентября 2008

Как я могу хранить пользовательский объект vb.net в базе данных sql. Я не пытаюсь копировать свойства с колонками. Я имею в виду что-то вроде преобразования или кодирования моего объекта в байтовый массив, а затем сохранения этого в поле в БД. Например, когда вы сохраняете экземпляр объекта в сеансе, но мне нужно, чтобы информация сохранялась после текущего сеанса.


@ Орион Эдвардс

Это не вопрос позиции. Это потому, что однажды вы измените свой код. Затем вы попытаетесь десериализовать старый объект, и ваша программа рухнет.

Моя программа не будет "CRASH", она выдаст исключение. К счастью для меня .net имеет целый набор классов, посвященных этому случаю. В это время я обновлю свои устаревшие данные и верну их в базу данных. Это точка этого одного поля (или позиции, в зависимости от обстоятельств).

Ответы [ 8 ]

5 голосов
/ 03 сентября 2008

Вы можете использовать сериализацию - она ​​позволяет хранить ваш объект как минимум в 3 формах: двоичный (подходит для больших двоичных объектов), XML (использовать тип данных XML MSSQL) или просто обычный текст (хранить в графическом или текстовом столбце)

3 голосов
/ 03 сентября 2008

Прежде чем вы пойдете по этому пути к своему собственному возможному безумию, вы должны взглянуть на это (или однажды повторить):

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

Сохранять объекты в базе данных не очень хорошая идея. Он убивает все хорошие вещи, для которых предназначена база данных.

2 голосов
/ 03 сентября 2008

Вы можете использовать класс BinaryFormatter для сериализации вашего объекта в двоичный формат, а затем сохранить полученную строку в вашей базе данных.

1 голос
/ 03 сентября 2008

XmlSerializer или DataContractSerializer в .net 3.x выполнят эту работу за вас.

0 голосов
/ 03 сентября 2008

Если произойдет сбой (или возникнет исключение), все, что у вас останется, - это набор двоичных данных, которые можно попытаться восстановить, чтобы воссоздать ваши объекты.

Если вы сохраняете только двоичный файл, почему бы просто не сохранить его прямо на диск. Возможно, вы захотите использовать что-то вроде xml, поскольку, как уже упоминалось, если вы измените определение своего объекта, вы не сможете отменить его сериализацию без какой-либо тяжелой работы.

0 голосов
/ 03 сентября 2008

Я возвращаюсь @ 1800 Информация об этом.
Сериализация объектов для длительного хранения никогда не была хорошей идеей

Хотя я ценю вашу позицию по этому вопросу, это особый случай данных, которые я получаю от веб-службы, которая обновляется только раз в месяц.

Это не вопрос позиции. Это потому, что однажды вы измените свой код. Затем вы попытаетесь десериализовать старый объект, и ваша программа рухнет.

0 голосов
/ 03 сентября 2008

То, что вы хотите сделать, называется «сериализацией» вашего объекта, и у .Net есть несколько разных способов сделать это. Одним из них является класс XmlSerializer в пространстве имен System.Xml.Serialization.

Другой находится в пространстве имен System.Runtime.Serialization. В нем есть поддержка форматера SOAP, двоичного форматера и базового класса, который можно унаследовать, чтобы все реализовали общий интерфейс.

Для того, о чем вы говорите, предложенный ранее BinaryFormatter, вероятно, будет иметь лучшую производительность.

0 голосов
/ 03 сентября 2008

@ aku, lomaxx и bdukes - ваши решения - это то, что я искал.

@ 1800 ИНФОРМАЦИЯ - хотя я ценю вашу позицию по этому вопросу, это особый случай данных, которые я получаю от веб-сервиса, который обновляется только раз в месяц. Мне не нужно, чтобы данные сохранялись в виде базы данных, потому что это то, для чего предназначен веб-сервис. Ниже приведен код, который я наконец получил для работы.

Serialize

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

Deserialize

    #'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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...