내 응용 프로그램에 문제가 있습니다.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();
}
감사합니다!
사용자에게 20.000 개의 행을 표시하는 이유가 있습니까? 검색 및 필터링뿐만 아니라 페이징을 추가해야합니다. 그리고 600 열 ??? 고객 없음 ** 600 열이있는 20.000 행! –
반환하는 행 수에 제한을 포함하도록 'usp_con_global_report'를 수정할 수 있습니까? –
또는 google –