代码之家  ›  专栏  ›  技术社区  ›  Jagd Dai

Linq到实体和SQL Server 2008文件流

  •  3
  • Jagd Dai  · 技术社区  · 15 年前

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

    数据访问: Linq到实体

    我有数以千计的pdf文件,目前驻留在一个文件服务器上。我想把这些pdf文件从文件服务器上移开,放到SQLServer2008数据库中,这样我可以更轻松地管理它们。

    作为概念证明(即,为了确保SQL Server 2008中新的FileStream功能是我正在寻找的),我编写了一个小应用程序,可以通过entities框架将这些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兆字节,他们得到了错误。

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   marc_s    15 年前

    流动 在您的示例中,非常多的是在FILESTREAM中。。。。

    MSDN docs on FILESTREAM in ADO.NET this article 这两个例子都展示了如何将SqlFileStream作为来自C#的流使用——这应该比将整个PDF文件放入内存要好得多(我相信)。。。。