1

我正在使用 C# 和 ASP.NET MVC 3。目前,我正在从 SQL Server 获取大量数据,将其添加到StringBuilder中,然后使用System.Text.ASCIIEncodingStringBuilder对象转换为byte[]数组。

然后我将byte[]数组发送到视图。但是,数据量如此之大,我得到以下异常:

引发了“System.OutOfMemoryException”类型的异常

这是我在控制器中用于将StringBuilder对象转换为byte[]然后返回视图的代码。有没有办法将数据直接从数据库流式传输到客户端浏览器,而无需先将其全部加载到服务器的内存中?

System.Text.ASCIIEncoding encoding = new ASCIIEncoding();
return File(encoding.GetBytes(csv.ToString()), "text/csv", "Query_Export.csv");
4

1 回答 1

2

您可以执行类似于以下伪代码的操作

  while (sqlReader.GetBytes(params))//params is a placeholder for the actual arguments and
                                    //will have a byte array buffer and some counter indexes
  {
      context.Response.BinaryWrite(buffer);
      //somecounter
  }

SqlDataReader http://msdn.microsoft.com/en-in/library/system.data.sqlclient.sqldatareader.aspx

于 2013-04-03T07:29:31.837 回答