【问题标题】:vb.net object persisted in databasevb.net 对象持久保存在数据库中
【发布时间】:2010-09-07 15:21:56
【问题描述】:

如何将 vb.net 用户定义的对象存储在 sql 数据库中。我不是想用列复制属性。我的意思是将我的对象转换或编码为字节数组,然后将其存储在数据库中的一个字段中。就像您在会话中存储对象的实例一样,但我需要信息在当前会话之后持续存在。


@Orion Edwards

这不是立场问题。这是因为有一天,你会改变你的代码。然后您将尝试反序列化旧对象,您的程序将崩溃。

我的程序不会“崩溃”,它会抛出异常。幸运的是,.net 有一整套专门用于这种场合的课程。届时我将刷新我的陈旧数据并将其放回数据库中。这就是这一领域的重点(或立场,视情况而定)。

【问题讨论】:

    标签: sql vb.net serialization


    【解决方案1】:

    如果它崩溃(或抛出异常),你只剩下一堆二进制数据来尝试筛选以重新创建你的对象。

    如果您只保留二进制文件,为什么不直接保存到磁盘。您可能还想考虑使用 xml 之类的东西,正如已经提到的,如果您更改对象定义,您可能无法在不付出努力的情况下对其进行反序列化。

    【讨论】:

      【解决方案2】:

      我支持@1800 关于这个的信息。
      为长期存储而序列化对象从来都不是一个好主意

      虽然我很欣赏你对此事的立场,但这是我从网络服务中获得的数据的一个特例,该网络服务大约每月刷新一次。

      这不是立场问题。这是因为有一天,你会改变你的代码。然后您将尝试反序列化旧对象,您的程序将崩溃。

      【讨论】:

        【解决方案3】:

        您想要做的是“序列化”您的对象,而 .Net 有几种不同的方法来处理它。一种是 System.Xml.Serialization 命名空间中的 XmlSerializer 类。

        另一个在 System.Runtime.Serialization 命名空间中。它支持 SOAP 格式化程序、二进制格式化程序和您可以从它们继承的基类,它们都实现了一个通用接口。

        对于您所说的,之前建议的 BinaryFormatter 可能具有最佳性能。

        【讨论】:

          【解决方案4】:

          @aku、lomaxx 和 bdukes - 您的解决方案正是我所寻找的。

          @1800 信息 - 虽然我很欣赏你对此事的立场,但这是我从网络服务中获得的数据的一个特例,它每月仅刷新一次。我不需要以 db 形式保存的数据,因为这就是 web 服务的用途。下面是我终于开始工作的代码。

          序列化

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

          【讨论】:

            【解决方案5】:

            在你走上这条通往自己最终精神错乱的道路之前,你应该看看这个(或者有一天重复一遍):

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

            在数据库中持久化对象不是一个好主意。它扼杀了数据库旨在做的所有好事。

            【讨论】:

              【解决方案6】:

              .net 3.x 中的 XmlSerializer 或 DataContractSerializer 将为您完成这项工作。

              【讨论】:

                【解决方案7】:

                您可以使用serialization - 它允许您至少以 3 种形式存储对象:二进制(适用于 BLOB)、XML(利用 MSSQL 的 XML 数据类型)或纯文本(以 varchar 或文本存储列)

                【讨论】:

                  【解决方案8】:

                  您可以使用BinaryFormatter 类将您的对象序列化为二进制格式,然后将生成的字符串保存在您的数据库中。

                  【讨论】:

                    猜你喜欢
                    • 2011-05-30
                    • 2022-11-28
                    • 2022-11-24
                    • 2013-08-19
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多