将大文件写入HTTP响应

时间:2012-10-23 11:02:57

标签: c#-4.0

我目前正在使用c#.net开发一个asp应用程序。我必须查询一个大的(10GB)SQLite数据库,并将数据作为CSV格式写入HTTP响应。 我这样做

        /*query database, use string builder to create a csv*/
        Response.ContentType = "text/plain";
        Response.AddHeader("Content-Length", result.Length.ToString());
        Response.AddHeader("Content-Disposition", "attachment; filename=\"Data.csv\"");
        Response.Write(result);
        Response.Flush();

哪个工作文件包含少量数据。但是当文件大小增加时,我得到一个OutOfMemoryException。我认为使用StringBuilder创建一个字符串会导致问题。我无法找到解决问题的方法。有谁可以帮我解决这个问题?

2 个答案:

答案 0 :(得分:2)

您需要按DataReader读取数据并将其写入Response.OutputStream。 像这样:

SqlDataReader dr;
//initialize datareader to your table
...
Response.Clear();
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", "attachment; filename=\"Data.csv\"");
var writer = new StreamWriter(Response.OutputStream);
while (dr.Read())
{
    writer.WriteLine(dr[1].ToString()+";"+dr[2].ToString()+";"+dr[3].ToString()+";");
    Response.Flush();
}

答案 1 :(得分:1)

我实际上解决了这个问题。 我这样做了

Response.Clear();
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", "attachment; filename=\"Data.csv\"");
foreach(var item in dbItem)
{
     /*create a string with database data*/
     Response.write(string);
     Response.Flush();
}
Response.End();