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

时间:2020-03-05 18:46:48  来源:igfitidea点击:

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

@猎户座爱德华兹

It's not a matter of stances. It's because one day, you will change your code. Then you will try de-serialize the old object, and YOUR PROGRAM WILL CRASH.

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

解决方案

回答

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

回答

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

回答

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

回答

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

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

在数据库中保留对象不是一个好主意。它杀死了数据库旨在完成的所有美好工作。

回答

@ aku,lomaxx和bdukes是我们一直在寻找的解决方案。

@ 1800信息虽然我很感谢我们在此问题上的立场,但这是我从Web服务获取的数据的特例,该服务仅每月大约刷新一次。我不需要以db形式保存的数据,因为那是webservice的用途。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。下面是我终于开始工作的代码。

连载

#'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信息。
序列化对象以进行长期存储绝不是一个好主意

while i appreciate your stance on the matter, this is a special case of data that I get from a webservice that gets refreshed only about once a month.

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

回答

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

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