3

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

数据访问: Linq to Entity

我有成千上万的 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 兆字节,并且出现错误。

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

4

1 回答 1

3

在您的示例中,您并没有非常多地使用 FILESTREAM 中的流式传输......

查看ADO.NET 中 FILESTREAM 上的 MSDN 文档这篇文章,它们都展示了如何将 SqlFileStream 用作来自 C# 的流 - 这应该比将整个 PDF 吸入内存要好得多(我相信)......

马克

于 2009-11-05T17:04:06.580 回答