我目前正在使用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创建一个字符串会导致问题。我无法找到解决问题的方法。有谁可以帮我解决这个问题?
答案 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();