2013-10-22 37 views
0

我有一個SQL Server表,其中Varbinary(Max)列基本上是壓縮數據。從sql server下載varbinary數據

我的頁面允許用戶下載此數據(在通常的用戶認證之後)。

它用於工作正常,數據量較小,但隨着時間的推移,數據也越來越大。在出現保存對話框之前,我基本面臨着很多問題,等待時間過長。

代碼:

while (reader.Read()) 
      { 
       Response.Buffer = false; 
       Response.Charset = ""; 
       Response.Cache.SetCacheability(HttpCacheability.NoCache); 
       Response.ContentType = "application/gzip"; 
       Response.AddHeader("content-disposition", "attachment;filename=" 
       + "vbet_1_1.sdf.gz"); 
       byte[] bytes = (Byte[])reader["backupdata"]; // STUCK HERE 
       Response.BinaryWrite(bytes); 
       Response.Flush(); 
       Response.End(); 
      } 

在調試器中,我可以看到,

byte[] bytes = (Byte[])reader["backupdata"]; 

一種情況,即滯後。

我的平臺是ASP.Net與.NET框架4.0,SQL Server 2008中,C#代碼隱藏

+1

我會建議以移動數據保存到文件系統,還有什麼理由你存儲數據在分貝?請參閱此網址的更多細節http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay –

+0

我真的很希望,甚至建議,但這裏的事情需要時間來改變 – arvind

回答

1

您需要流回響應。讀取內存中的整個文件然後寫出來並不會擴展,並且您將開始按照請求數來擴大服務器,文件大小會增加。

看一看Download and Upload images from SQL Server via ASP.Net MVCFILESTREAM MVC: Download and Upload images from SQL Server看到如何做到這一點的例子。當你不使用MVC,但直ASP.NEt你可以做到這一點簡單的,但這些想法都一樣:

+0

是的,即時閱讀和收集所有信息。謝謝,有沒有可用的代碼片段? (第一個例子看起來像一個庫實現..將需要時間來研究) – arvind

1

這可能會有所幫助:

Response.AppendHeader("Content-Type", "application/gzip "); 
Response.OutputStream.Write((Byte[])reader["backupdata"],0,((Byte[])reader["backupdata"]).Length); 

你也可以使用FILESTREAM表從sql2012直接存儲文件

+0

不幸的是SQL 2008,和varbinary上的文件流類型是不允許的,由於安全性 – arvind

相關問題