2010-08-28 71 views
1

我有一些數據,我正在序列化。我需要在.Net 3.5(不是4.0)下使用ADO.NET(也使用企業庫)從VarBinary列中保存和恢復。讓Stream進出VarBinary(MAX)列? (SQL Server)

我似乎能夠找到和工作的唯一接口是使用一個字節[]。這需要分配一個大陣列來完成傳輸。

ADO.NET不支持這些列的Streams。或者我忽略了什麼?

謝謝

回答

3

我一直在尋找相同的答案。我發現在EggHeadCafe了一篇文章,提供了使用的命令的解決方案是這樣的記載:
SELECT substring(DataColumn, @offset, @length) FROM BlobTable WHERE ID = @key

而且這樣的命令寫道:
UPDATE BlobTable SET DataColumn.write(@buffer, @offset, @length) WHERE ID = @key

你可以找到完整的解決方案(使用自定義流類)在這裏:http://www.eggheadcafe.com/software/aspnet/29988841/how-to-readwrite-chunked-to-varbinarymax-in-c.aspx

對我而言,我想我將使用從Sql Server 2008開始提供的FileStream數據類型。一旦插入了一條記錄(sans binary data),Sql Server就會在磁盤上分配一個物理文件來讀寫記錄數據。然後運行一個命令來獲取路徑名:
SELECT DataColumn.PathName() FROM BloblTable WHERE [Id] = @key

一旦你有,你可以閱讀和使用傳統的流類,像System.IO.FileStream寫入文件。

存在相當大的開銷,但FileStream隨着文件變大(大約10mb)而變得更快。對於較小的文件,您可以將FileStream列作爲varbinary列來處理,而且開銷要小得多。 CodeProject上的這篇文章解釋了細節:http://www.codeproject.com/KB/database/SqlFileStream.aspx

相關問題