后端:启用了FileStream的SQL Server 2008数据库

数据访问:Linq到实体

我有成千上万个pdf,当前位于文件服务器上。我想将这些pdf文件从文件服务器移到SQL Server 2008数据库中,以便我可以更轻松地管理它们。

作为概念验证(即-确保我正在寻找SQL Server 2008中的新FileStream功能),我写了一个小应用程序,它将通过实体框架将这些pdf读写到启用FileStream的数据库中。

该应用程序非常简单;这是代码:

datReport report = new datReport();
report.ReportName = "ANL-7411-Rev-Supp-1.pdf";
report.RowGuid = Guid.NewGuid();

// The following line blows up on really big pdf's (350+ mb's)
report.ReportData = File.ReadAllBytes(@"C:\TestSavePDF\ANL-7411-Rev-Supp-1.pdf");

using (NewNNAFTAEntities ctx = new NewNNAFTAEntities()) {
   ctx.AddTodatReport(report);
   ctx.SaveChanges();
}


我在上面的代码行中注释了发生错误的位置。确切的错误是“ System.outofmemoryexception”,这使我毫不怀疑文件大小是引起问题的原因。上面的代码确实适用于较小的pdf。我不知道文件大小的确切限制在哪里,但是我最大的pdf超过350兆字节,并且出现错误。

任何帮助将不胜感激。谢谢!

最佳答案

在您的示例中,您不是非常使用FILESTREAM中的流式传输...。

查看MSDN docs on FILESTREAM in ADO.NETthis article,它们都显示了如何使用SqlFileStream作为C#的流-与将整个PDF吸收到内存中相比,它们应该工作得更好(我相信)。

马克

关于asp.net - Linq to Entities和SQL Server 2008 FileStream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1681852/

10-12 03:55