2014-01-14 3 views
0

내 응용 프로그램에 문제가 있습니다.GridView의 System.OutOfMemoryException

우선, 내 영어에 대해 미안하지만, 저는 칠레 출신이고 아직 배우고 있습니다.

나는 db로부터 정보를 엑셀에 제공하는 방법이있다. 클라이언트는 화면에서 보고서를 볼 필요가 없습니다. 앱에서 보고서를 다운로드하기 만하면됩니다.

이 메서드는 너무 많은 데이터 (약 600 열과 20000 행)를 제공하는 저장 프로 시저를 호출하므로 DataBind()에서 GridView에 테이블을 할당하면 System.OutOfMemoryException이 반환됩니다.

데이터가있는 GridView를로드하는 다른 방법이 있습니까? 클라이언트가 보고서의 모든 날짜를 필요로하기 때문에 쿼리를 필터링하거나 단순화 할 수 없습니다. 내가 프레임 워크 4.0, SQL Server 2008의

, 비주얼 스튜디오 2010 사용하고 있는데이는 방법 : 당신의 도움에 대한

private void getsReport() 
{ 
    string reportName = "Globarl_Report_" +  User.Identity.Name + "_" + DateTime.Now.ToString("yyyyMMdd")+".xls"; 
    Database db = DatabaseFactory.CreateDatabase(ConfigurationManager.AppSettings["SNAT"].ToString()); 
    DBCommandWrapper com = db.GetSqlStringCommandWrapper("usp_con_global_report);// sp that give report. 

    com.CommandTimeout = 360; 

    StringBuilder sb = new StringBuilder(); 
    StringWriter sw = new StringWriter(sb); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    Page pagina = new Page(); 
    HtmlForm form = new HtmlForm(); 
    DataTable tabla = db.ExecuteDataSet(com).Tables[0]; ; 
    GridView dg = new GridView(); 

    dg.EnableViewState = false; 
    dg.DataSource = tabla; 
    dg.DataBind();//THIS LINES THROWS EXCEPTION!! 
    pagina.EnableEventValidation = false; 
    pagina.DesignerInitialize(); 
    pagina.Controls.Add(form); 
    form.Controls.Add(dg); 
    pagina.RenderControl(htw); 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + nombreArchivo); 
    Response.Charset = "UTF-8"; 
    Response.ContentEncoding = Encoding.Default; 
    Response.Write(sb.ToString()); 
    Response.End(); 
} 

감사합니다!

+5

사용자에게 20.000 개의 행을 표시하는 이유가 있습니까? 검색 및 필터링뿐만 아니라 페이징을 추가해야합니다. 그리고 600 열 ??? 고객 없음 ** 600 열이있는 20.000 행! –

+1

반환하는 행 수에 제한을 포함하도록 'usp_con_global_report'를 수정할 수 있습니까? –

+0

또는 google –

답변

0

모든 데이터를로드하는 것이 가능에만 Excel로 내보낼 수 있도록하는 남자 이름을?

그런 경우 서버에서 (일정 또는 클라이언트 요청에 따라 동적으로) csv 파일을 만들고 페이지에 링크를 넣어 다운로드 할 수 있습니다.

나중에 Excel (또는 다른 스프레드 시트 프로세서)로 열 수 있습니다.

관련 문제