2010-03-28 36 views
3

我使用的是C#,我無法將大文件加載到二進制字段中使用字節數組。如何將文件加載到blob而不先加載到RAM中?

基本上,如果我加載的文件太大,我得到內存問題。

有沒有辦法在不使用大量ram的情況下將文件加載到二進制字段中,即避免首先將文件加載到內存中?

如果有幫助,我使用Advantage Database Server,這是使用Winforms應用程序而不是Web應用程序。

問候

回答

0

除非你選擇簡單地添加到數據庫到文件所在,必須先通過內存的引用,所以ID建議尋找到加載該文件x字節一次一個解決方案。

0

我在使用「UPDATE .WRITE」之前完成了此操作。我從流中讀取文件的塊並將數據附加到數據庫字段。在此頁面搜索.WRITE:http://msdn.microsoft.com/en-us/library/ms177523.aspx

不幸的是,這是針對SQL Server的。我認爲Advantage Database Server在這裏會有所不同,但也許這會讓你朝着正確的方向發展。

2

您可以直接使用Advantage Client Engine(ACE)並調用AdsSetBinary API以塊爲單位設置blob。對不起,我現在沒有時間爲你寫一個例子。您需要將這個原型添加到您的C#文件:

[DllImport("ace32.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Winapi)] 
       public static extern uint AdsSetBinary(IntPtr hTable, String pucFldName, ushort usBinaryType, uint ulTotalLength, uint ulOffset, byte[] pucBuf, uint ulLen); 

這裏是在C API參考鏈接:

http://devzone.advantagedatabase.com/dz/webhelp/Advantage9.1/mergedProjects/ace/api2/adssetbinary.htm

爲了獲得句柄傳遞API,請參閱AdsExtendedReader.AdsHandle文檔。

更新:我剛纔看到Alex的答案,它比我的好,我不知道,我們已經包裹着.NET方法的調用AdsSetBinary。您可能希望將他的答案標記爲這個問題的正確答案。 :)

5

AdsExtendedReader.SetBytes可用於以塊加載blob。它將對Jeremy提到的AdsSetBinary()的調用封裝起來。

參見AdsExtendedReader.SetBytes

相關問題