我已经使用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 :(得分:1)
简单回答:如果你唯一的工具是锤子,那么每个问题看起来都像钉子一样。
Linq2SQL是一个O / R映射器。我没有处理对象中的大量二进制数据。没有办法按照你想要的方式做你想做的事。删除Linq2SQL用于此特定部分,并使用SQL特殊语法进行部分读/写(基本上,您可以在每次执行SQK命令时只写入blob的blob / read部分)。
对于几乎所有其他ORM来说,同样如此 - 在您创建ORM时,BLOB存储不是您想要的(在那里,完成了)。
答案 1 :(得分:0)
我认为您可以使用图像数据类型(在SQL Server中)在您的数据库中存储大文件。如果您使用的是另一个DBMS,那么SQL Server应该具有与Image数据类型等效的数据类型 Image是一个字节数组,因此您不应更改代码