2013-07-22 177 views
0

我有一個對象,我想要存儲到數據庫表上。表條目由該對象的所有屬性組成。其中一個屬性是雙打數組。此數組可能會根據大約4,000到100,000個值而不同。我以前試圖創建兩個表,一個用於大多數屬性,另一個包含這些double值。然後在兩者之間建立關係。我意識到,當我將對象轉移到表格時,需要相當長的時間才能將點轉移到第二個表格上。這就像每個對象數以千計的查詢。所以,我的第二個計劃是採用這個雙精度數組,並將它們全部放在表中的varbinary(max)條目中。如何將雙精度數組存儲到varbinary數據類型中,並將其存儲到數據庫中?

我已經得到了迴應,這是可能的,但我不明白該怎麼做。

+0

最簡單的方法是將你的double數組轉換爲一個字節數組,然後將字節數組存儲到varbinary字段中。看到這個答案的方式來將雙數組轉換爲字節數組.. .. http://stackoverflow.com/a/6953111/1181408。如果你需要關於sql上下文的幫助,請看這個答案。 http://stackoverflow.com/a/4057802/1181408 – cgotberg

回答

0

根據您已將雙打寫入流(本例中名爲_pictureContent)的假設,您可以使用AddWithValue將其寫入爲sqlCommand參數。

command.Parameters.AddWithValue(「@ PictureContent」,_pictureContent);

讀回以:

我存儲在「緩衝區大小」爲表一個單獨的列,所以當我看到它,我知道我是否採用它還是沒有什麼。如果我這樣做,我使用GetBytes來讀取varbinary列。

long bufferSize = dataReader.IsDBNull(FIELD_BUFFERSIZE)? 0:dataReader.GetInt64(FIELD_BUFFERSIZE);
if(bufferSize> 0)
{
j.PictureContent = new byte [bufferSize];
bufferSize = dataReader.GetBytes(FIELD_PICTURECONTENT,0,_pictureContent,0,Convert.ToInt32(bufferSize));
}

FIELD_PICTURECONTENT被列的傳入收集(即,第五列)中的偏移量,第一個0是從輸入流中讀取的起始位置,_picture內容是目標字節數組第二個0是要寫入字節數組的偏移量,(buffersize)是要讀取的字節數。

相關問題