C# 从sql server下载varbinary数据
我有一个SQL Server表,其中有一个C# 从sql server下载varbinary数据,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我有一个SQL Server表,其中有一个Varbinary(Max)列,基本上是压缩数据 我的页面允许用户下载此数据(在通常的用户身份验证之后) 它过去工作正常,数据量较小,但现在随着时间的推移,数据也越来越大。在保存对话框出现之前,我面临很多问题,基本上需要等待一段时间 代码: 在调试器中,我可以看到 byte[] bytes = (Byte[])reader["backupdata"]; 这就是滞后的所在 我的平台是ASP.Net,带有.Net Framework 4.0、SQL Ser
Varbinary(Max)
列,基本上是压缩数据
我的页面允许用户下载此数据(在通常的用户身份验证之后)
它过去工作正常,数据量较小,但现在随着时间的推移,数据也越来越大。在保存对话框出现之前,我面临很多问题,基本上需要等待一段时间
代码:
在调试器中,我可以看到
byte[] bytes = (Byte[])reader["backupdata"];
这就是滞后的所在
我的平台是ASP.Net,带有.Net Framework 4.0、SQL Server 2008、C#codebehind您需要将响应流式传输回来。在内存中读取整个文件,然后将其写出来是不可能扩展的,并且随着请求数量或文件大小的增加,您将开始退出服务器 请看一看并查看如何执行此操作的示例。由于您不使用MVC,而是直接使用ASP.NEt,因此您可以更简单地使用它,但思路是相同的:
- 使用流式API读取数据库响应(特别是
with),并使用(再次注意MSDN上关于SqlCommand.ExecuteReade
标志的重要性的小片段…)分块读取响应SequentialAccess
- 使用流式API编写HTTP响应。行
- 这可能会有帮助:
Response.AppendHeader("Content-Type", "application/gzip ");
Response.OutputStream.Write((Byte[])reader["backupdata"],0,((Byte[])reader["backupdata"]).Length);
您可以使用sql2012中的filestream表直接存储文件我建议将数据移动到文件系统中,您有什么理由将数据存储在db中吗?请参考此url了解更多详细信息我真的很希望,甚至建议,但这里的事情需要时间来改变是的,我正在阅读和收集所有信息。谢谢,有代码片段吗?(第一个示例看起来像是一个库实现..需要花时间来研究)不幸的是,sql 2008和varbinary上的Filestream类型由于安全原因是不允许的
Response.AppendHeader("Content-Type", "application/gzip ");
Response.OutputStream.Write((Byte[])reader["backupdata"],0,((Byte[])reader["backupdata"]).Length);