繁体   English   中英

vb.net对象保留在数据库中

[英]vb.net object persisted in database

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


@猎户座爱德华兹

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

我的程序不会“ CRASH”,它将引发异常。 对我来说幸运的是,.net有一系列专门针对此类场合的类。 到那时,我将刷新陈旧的数据并将其放回数据库。 这就是这一领域的重点(或视情况而定)。

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

在走上通往自己最终的精神错乱的道路之前,您应该看一下(或重复一天):

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

在数据库中保留对象不是一个好主意。 它杀死了数据库设计要做的所有美好事情。

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

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

@ aku,lomaxx和bdukes-您正在寻找的解决方案。

@ 1800信息-我很感谢您在此问题上的立场,但是这是我从一个每月仅更新一次的Web服务获取的数据的特例。 我不需要以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)

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

另一个是在System.Runtime.Serialization命名空间中。 它支持SOAP格式化程序,二进制格式化程序以及可以从中继承的基类,所有这些都实现了公共接口。

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

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

我很感谢您在此问题上的立场,但这是我从Web服务获取的数据的特例,该服务每月仅更新一次。

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

如果崩溃(或引发异常),您所剩下的就是一堆二进制数据,尝试并筛选以重新创建对象。

如果只保留二进制文件,为什么不直接保存到磁盘。 如前所述,您可能还想使用xml之类的东西,如果您更改对象定义,那么您可能需要一些艰苦的工作才能对它进行反序列化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM