vb.net объект, сохраненный в базе данных
-
09-06-2019 - |
Вопрос
Как я могу сохранить vb.net пользовательский объект в базе данных sql.Я не пытаюсь копировать свойства со столбцами.Я имею в виду что-то вроде преобразования или кодирования моего объекта в массив байтов, а затем сохранения этого в поле в базе данных.Например, когда вы сохраняете экземпляр объекта в сеансе, но мне нужна информация, которая сохранится после текущего сеанса.
@Орион Эдвардс
Дело не в позициях.Это потому, что однажды вы измените свой код.Затем вы попытаетесь десериализовать старый объект, и ВАША ПРОГРАММА ЗАВЕРШИТСЯ СБОЕМ.
Моя программа не будет "АВАРИЙНО завершать работу", она выдаст исключение.К счастью для меня, в .net есть целый набор классов, предназначенных для такого случая.В это время я обновлю свои устаревшие данные и помещу их обратно в базу данных.В этом суть данного поля (или позиции, в зависимости от обстоятельств).
Решение
Вы можете использовать сериализация - это позволяет вам хранить ваш объект как минимум в 3 формах:двоичный (подходит для больших двоичных объектов), XML (используйте преимущества XML-типа данных MSSQL) или просто обычный текст (сохраняйте в varchar или текстовом столбце).
Другие советы
Прежде чем идти по этому пути к вашему собственному безумию, вы должны взглянуть на это (или однажды повторить):
http://thedailywtf.com/Articles/The-Mythical-Business -Layer.aspx р>
Сохранять объекты в базе данных не очень хорошая идея. Он убивает все хорошие вещи, для которых предназначена база данных.
Вы можете использовать BinaryFormatter. класс для сериализации вашего объекта в двоичном формате, а затем сохранить полученную строку в вашей базе данных.
XmlSerializer или DataContractSerializer в .net 3.x выполнят эту работу за вас.
@aku, lomaxx и bdukes - ваши решения - это то, что я искал.
@1800 INFORMATION - хотя я ценю вашу позицию по этому вопросу, это особый случай данных, которые я получаю от веб-сервиса, который обновляется только примерно раз в месяц.Мне не нужны данные, сохраненные в форме базы данных, потому что для этого и предназначен веб-сервис.Ниже приведен код, с которым я, наконец, приступил к работе.
Сериализовать
#'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. Информация об этом.
Сериализация объектов для длительного хранения никогда не была хорошей идеей.
Хотя я ценю вашу позицию по этому вопросу, это особый случай данных, которые я получаю от веб-службы, которая обновляется только примерно раз в месяц.
Это не вопрос позиции. Это потому, что однажды вы измените свой код. Затем вы попытаетесь десериализовать старый объект, и ваша программа рухнет.
Если он выходит из строя (или выдает исключение), все, что у вас остается, - это набор двоичных данных, которые можно попытаться воспроизвести для восстановления ваших объектов. Р>
Если вы сохраняете только двоичный файл, почему бы просто не сохранить его прямо на диск. Вы также можете захотеть использовать что-то вроде xml, так как, как уже упоминалось, если вы измените определение своего объекта, вы не сможете отменить его сериализацию без некоторой тяжелой работы.