C# 4.0 将大文件写入HTTP响应

C# 4.0 将大文件写入HTTP响应,c#-4.0,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.ToStrin

我目前正在用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创建字符串是问题的根源。我想不出任何办法来解决这个问题。有人能帮我解决这个问题吗?

您需要通过
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();
}

我实际上解决了这个问题。 是我干的

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();

你想达到什么目标?您想在客户端或其他设备上下载此文件吗?你的应用程序是asp.NETMVC还是webforms?我认为使用http来实现这一点不是一个好策略。我以为是javascript,但实际上是c,然后在服务器端。但是客户将如何处理这个问题呢?我想,在客户端,客户端会看到一个文件下载提示。应用程序在webforms上@Kirill如果您临时为此文件创建一个ftp服务器并将ftp链接发送到客户端会怎么样?这很简单。。。以日期和时间作为后缀、前缀或全名