2008-09-02 49 views
1

我怎样才能将一个vb.net用户定义的对象存储在一个sql数据库中。我不想用列复制属性。我的意思是沿着转换或编码我的对象到字节数组,然后将其存储在数据库中的字段的行。就像在会话中存储对象的实例时一样,但我需要信息持续保留当前会话。vb.net对象在数据库中持久存在


@Orion爱德华兹

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

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

回答

5

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

2

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

1

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

0

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

@ 1800信息 - 虽然我很欣赏你对此事的立场,但这是一个特殊情况,我从一个每月只能刷新一次的web服务中获得数据。我不需要数据保存在数据库表单中,因为那就是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) 
0

你想要做什么叫做“序列化”的对象,.Net有几种不同的方式去了解它。一个是System.Xml.Serialization命名空间中的XmlSerializer类。

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

对于你所说的,前面提到的BinaryFormatter可能会有最好的性能。

0

我支持@ 1800此信息。
长期存储序列化对象从来都不是一个好主意

,而我对此事非常感谢您的立场,这是数据的一个特殊情况,我从被每个月只需要刷新一次左右web服务获得。

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

0

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

如果你只是坚持二进制为什么不直接保存到磁盘。正如前面提到的,如果你改变了对象的定义,你也许会想使用像xml这样的东西,如果没有一些辛苦的工作,你可能无法解除它的序列化。