2012-10-23 4 views
1

현재 C# .net으로 ASP 응용 프로그램을 개발 중입니다. 큰 (10GB) SQLite 데이터베이스를 쿼리하고 HTTP 응답에 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

무엇을 목표로하고 싶니? 이 파일을 클라이언트 또는 다른 것으로 다운로드 하시겠습니까? 귀하의 응용 프로그램은 asp.net mvc 또는 webforms 있습니까? –

+0

나는 이렇게하기 위해 http를 사용하는 것이 좋은 전략이라고 생각하지 않는다. 내 생각 엔 자바 스크립트지만 서버 측에서 실제로는 C#이라고 생각했다. 그러나 클라이언트가 이것을 어떻게 처리 할 것인가? 내가 생각하는 것과 같은 영향으로 응답 할 것입니다 ... – memosdp

+0

클라이언트 쪽 클라이언트에 파일 다운로드 프롬프트가 표시됩니다. 그리고 응용 프로그램은 webforms에 있습니다. @Kirill – Muctadir

답변

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(); 
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(); 
} 
관련 문제