从sql server下载varbinary数据

时间:2013-10-22 11:28:22

标签: c# asp.net sql-server

我有一个SQL Server表,其中Varbinary(Max)列基本上是压缩数据。

我的页面允许用户下载此数据(在通常的用户身份验证之后)。

以前工作正常,数据量较小,但现在随着时间的推移,数据也越来越大。在出现“保存”对话框之前,我基本上面临很多问题等待时间。

代码:

 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 Framework 4.0,SQL Server 2008,C#codebehind

2 个答案:

答案 0 :(得分:1)

您需要回传流响应。读取内存中的整个文件,然后将其写出来不会扩展,随着请求数量文件大小的增加,您将开始耗尽服务器。

查看Download and Upload images from SQL Server via ASP.Net MVCFILESTREAM MVC: Download and Upload images from SQL Server,了解如何执行此操作的示例。因为你不使用MVC而是使用ASP.NEt你可以做得更简单,但想法是一样的:

答案 1 :(得分:1)

这可能会有所帮助:

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

您可以使用sql2012中的文件流表直接存储文件