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 に答える