2008-10-31 41 views
0

我正在使用c#,並有一個開放的tcpip連接接收數據。是否有可能將流保存到ms sql服務器數據庫,因爲我收到它,而不是接收所有數據,然後保存所有數據?如果數據流可以在接收時發送到數據庫,則不必將整個數據塊保存在內存中。這是可能嗎?直接傳輸到數據庫

回答

4

你正在寫數據庫作爲BLOB,還是以某種形式翻譯數據,然後對每行執行插入操作?

你在評論中的答案讓我感到困惑。將數據流寫入BLOB列是非常不同的,然後獲取數據然後將其轉換爲單獨行的插入。

無論如何,灑進BLOB列可以通過先創建與BLOB列,你需要插入,反覆調用update語句行:

update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId 

從流的字節塊。

Perfect example located here.

+0

在大多數情況下,我會將數據完全按照收到的數據寫入數據庫。 在某些情況下,我會讀取原始數據,建立一個xml流並保存它。我敢肯定,如果你剛剛回答了第一種情況,我可以爲第二種情況自行獲得一些東西。謝謝。 – Jeremy 2008-10-31 03:37:27

1

與流和數據庫工作的exmaples見herehere。實質上,您需要傳遞重複的緩衝區(理想情況下是SQL Server中8040字節的倍數)。請注意,這些示例基於SQL 2000;與SQL 2005,varbinary(max)會更容易。雖然非常相似。

1

爲什麼不在接收數據包時將緩衝區寫入文件,然後在傳輸完成後插入數據庫?

如果直接流入數據庫,您將持續很長時間連接到數據庫,尤其是在客戶端的網絡連接不是最好的情況下。