2013-02-10 30 views
3

我在C#中有一個用於存儲數據(如結構體)的類。它有子類作爲成員,其中有其他子類,等等,其中每個包含數據(各種字符串,整數,浮點數等)將C#對象存儲在SQL Server列中

有沒有辦法將一個這樣的C#對象存儲在一個數據庫中,在一個單一的柱? 這是什麼類型的列,我該如何使用它?

我能想到的唯一的事情就是使用算法將我的結構轉換爲字節序列並將其存儲在二進制類型的字段中。

然後我會使用解碼算法將其恢復並使其成爲對象。

即便如此,C#中是否有這樣的算法可以使用?

+3

你爲什麼會將對象存儲在數據庫中?我可以看到隱藏在這個戰略背後的數十個問題。 – 2013-02-10 12:56:02

回答

4

看到這個quetion 如果你願意,你可以在SQL Server中使用VARBINARY(MAX)字段類型。您可以在其中存儲任何類型的對象,最大可達2 GB。

訪問它,你可以使用ADO.NET - 是這樣的:

object yourMysteryObject = (whatever you like it to be); 

MemoryStream memStream = new MemoryStream(); 
StreamWriter sw = new StreamWriter(memStm); 

sw.Write(yourMysteryObject); 

SqlCommand sqlCmd = new SqlCommand("INSERT INTO TableName(VarBinaryColumn) VALUES (@VarBinary)", sqlConnection); 

sqlCmd.Parameters.Add("@VarBinary", SqlDbType.VarBinary, Int32.MaxValue); 

sqlCmd.Parameters["@VarBinary"].Value = memStream.GetBuffer(); 

sqlCmd.ExecuteNonQuery(); 
2

你可以序列化對象JSON,使用JSON.NET(http://json.codeplex.com/)和JSON數據存儲在數據庫。當你需要重新水合物與數據的對象,這可以通過JSON.NET再次做...

文檔是在這裏,它很容易使用和非常快:http://james.newtonking.com/projects/json/help/

+2

爲什麼使用XML和本機功能實現相同的目標時,JSON是第三方工具? – 2013-02-10 13:59:21

+0

@BrianP - 隨意使用XML發佈解決方案,我發現許多使用XML的問題,而不是用於完全像這樣序列化數據的JSON。 – 2013-02-10 14:42:42

+1

@BrianP,你可以通過NuGet獲得JSON.NET,並且它被廣泛使用。我建議JSON,因爲它比xml更輕量。 – christiandev 2013-02-11 09:38:36

相關問題