2008-09-02 44 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這樣的東西,如果沒有一些辛苦的工作,你可能無法解除它的序列化。