3

バックエンド: 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メガバイトを超えており、エラーが発生します.

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

3

あなたの例では、FILESTREAM でのストリーミングをあまり使用していません....

ADO.NET の FILESTREAM に関する MSDN ドキュメントこの記事を確認してください。両方とも、SqlFileStream を C# からのストリームとして使用する方法を示しています。これは、PDF 全体をメモリに吸い込むよりもはるかにうまく機能するはずです (私は信じています)。

マルク

于 2009-11-05T17:04:06.580 に答える