2009-09-06 88 views
1

大文件,我已經使用LINQ to SQL中存儲的文件在varbinary(max)場。 FILESTREAM被激活了,但是當我嘗試存儲與400或500 MB的文件,我得到這個錯誤:問題與儲存在數據庫

Exception of type 'System.OutOfMemoryException' was thrown 

我的代碼是:

Dim ByteArray() As Byte = File.ReadAllBytes(OpenFileDialog1.FileName) 
Dim tb As New tb_1() 
tb._id = System.Guid.NewGuid() 
tb._Blob = New System.Data.Linq.Binary(ByteArray) 
tb._text = Date.Now 
db.tb_1s.InsertOnSubmit(tb) 
Dim tb2 As New tb_2 
tb2._id = System.Guid.NewGuid 
tb2._Master = tb._id 
tb2._text = 2 
db.tb_2s.InsertOnSubmit(tb2) 
db.SubmitChanges() 

可能是我得到這個異常的原因和我怎樣才能避免它?

+0

你從哪裏得到錯誤?當你讀入ByteArray或者當你正在執行SubmitChanges時? 我有一個類似的問題讀取大文件和我切換到不同的方法來讀取字節並將其寫入文件,從而不必在內存中的整個文件在同一時間。 不知道你將如何做到這一點,因爲我不得不插入數據庫,在我的情況下,我只是讀和寫一個文件。 – Jay 2009-09-06 12:00:43

+0

在這一行: tb._Blob =新System.Data.Linq.Binary(字節陣列) 我得到的錯誤。 – 2009-09-09 10:28:43

回答

0

我想你可以使用圖像數據類型(SQL Server)的大文件存儲在database.If正在使用其他的SQL Server它應該有一個數據類型等同於圖像數據類型 Image是另一個DBMS字節數組,所以你不應該改變你的代碼

+0

Irelevant。 SQL Server也可以做到這一點。這純粹是一個客戶端錯誤。 – TomTom 2010-07-04 07:01:40

1

答案很簡單:如果你唯一的工具是一把錘子,所有問題看起來都像釘子。

LINQ2SQL是O/R映射器。它我沒有處理一個對象中的二進制數據的休息量。沒有辦法以你想要的方式做你想做的事。將Linq2SQL放到這個特定的部分,並使用SQL特殊語法進行部分讀取/寫入操作(基本上,每次執行SQK命令時,基本上只能寫入blob部分blob/read部分)。

也是如此,順便說一句,對於幾乎所有其他的ORM在那裏 - BLOB存儲是不是你心目中的東西,當你創建一個ORM(在那裏,這樣做的)。