1

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


@猎户座爱德华兹

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

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

4

8 回答 8

5

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

于 2008-09-02T23:13:34.550 回答
3

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

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

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

于 2008-09-02T23:32:41.477 回答
2

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

于 2008-09-02T23:11:22.730 回答
1

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

于 2008-09-02T23:23:49.737 回答
0

@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)
于 2008-09-03T03:18:24.820 回答
0

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

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

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

于 2008-09-03T03:25:32.213 回答
0

我支持@1800 关于这个的信息。
序列化对象以进行长期存储绝不是一个好主意

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

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

于 2008-09-03T04:20:14.140 回答
0

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

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

于 2008-09-03T04:32:06.623 回答