2

我目前正在使用 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 创建字符串会导致问题。我想不出任何解决问题的方法。谁能帮我解决这个问题?

4

2 回答 2

3

您需要读取数据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();
}
于 2012-10-23T11:42:27.030 回答
2

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

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();
于 2012-10-24T16:39:11.417 回答