Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从sql server下载varbinary数据_C#_Asp.net_Sql Server - Fatal编程技术网

C# 从sql server下载varbinary数据

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

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

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

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

代码:

在调试器中,我可以看到

byte[] bytes = (Byte[])reader["backupdata"];
这就是滞后的所在


我的平台是ASP.Net,带有.Net Framework 4.0、SQL Server 2008、C#codebehind

您需要将响应流式传输回来。在内存中读取整个文件,然后将其写出来是不可能扩展的,并且随着请求数量或文件大小的增加,您将开始退出服务器

请看一看并查看如何执行此操作的示例。由于您不使用MVC,而是直接使用ASP.NEt,因此您可以更简单地使用它,但思路是相同的:

  • 使用流式API读取数据库响应(特别是
    SqlCommand.ExecuteReade
    with),并使用(再次注意MSDN上关于
    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);