2009-11-05 92 views
3

後端: SQL Server 2008數據庫使用FileStream啓用LINQ到實體和SQL Server 2008中的FileStream

數據訪問: LINQ到實體

我有成千上萬的PDF文件的當前駐留在文件服務器上。我想將這些pdf從文件服務器移到SQL Server 2008數據庫,以便我可以更輕鬆地管理它們。作爲一個概念證明(即 - 確保SQL Server 2008中新的FileStream功能是我正在尋找的功能),我寫了一個小應用程序,它可以通過FileStream啓用的數據庫讀取和寫入這些pdf文件實體框架。

該應用程序非常簡單;這裏的代碼:

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兆字節,並且他們得到了錯誤。

任何幫助將不勝感激。謝謝!

回答

3

你不使用在FILESTREAM在你的例子非常多流 ....

退房的MSDN docs on FILESTREAM in ADO.NETthis article既展示瞭如何使用一個SqlFileStream從C#流 - 應該工作好得多(我相信)比吸吮整個PDF到內存....

馬克

+0

謝謝!我實際上是MSDN文章的一部分,但我一定錯過了關於SqlFileStream的部分。 – Jagd 2009-11-05 17:26:40