-
크리스탈리포트 보고서를 로드하지 못했습니다.프로젝트 2016. 11. 25. 17:12반응형
C#으로 만든 프로그램 안에
크리스탈리포트로 만든 문서를 인쇄할 때 70장 이상 연속해서 인쇄하려고 하면
자꾸 보고서를 로드하지 못했습니다. 메시지가 나온다.
중간에 되다 말긴 하지만 이 에러메시지에 있는 확인 버튼을 누르면 인쇄는 된다.
이걸 어찌 해결해야 하나.
내가 짠 코드에 무슨 문제가 있는 걸까....
private void btn_AllPrint_Click(object sender, EventArgs e){if (dgv_UserList.Rows.Count > 0){for (int i = 0; i < dgv_UserList.Rows.Count; i++){SqlCommand _SqlCmd = new SqlCommand();_SqlCmd.Parameters.Add("@FDate", SqlDbType.VarChar).Value = dtpk_FDdate.Value.ToString("yyyyMMdd");_SqlCmd.Parameters.Add("@TDate", SqlDbType.VarChar).Value = dtpk_TDdate.Value.ToString("yyyyMMdd");_SqlCmd.Parameters.Add("@UserID", SqlDbType.BigInt).Value = Int64.Parse(dgv_UserList.Rows[i].Cells["colUUserID"].Value.ToString());_DataClass.ExecuteAdapterSP("sp_Report_PersonAtt", _SqlCmd);dgv_ReportDayAtt.DataSource = getDataTable(_DataClass.ReturnDataSet);ResetData();DataSet1 ds = new DataSet1();DataTable dt = ds.Tables.Add("PersonAtt");DataRow dr1;dt.Columns.Add("tbDate", Type.GetType("System.String"));dt.Columns.Add("tbWorkType", Type.GetType("System.String"));dt.Columns.Add("tbWorkIn", Type.GetType("System.String"));dt.Columns.Add("tbWorkOut", Type.GetType("System.String"));dt.Columns.Add("tbWorkTime", Type.GetType("System.String"));dt.Columns.Add("tbEarlyWorkIn", Type.GetType("System.String"));dt.Columns.Add("tbExWorkTime", Type.GetType("System.String"));dt.Columns.Add("tbFoodEx", Type.GetType("System.String"));dt.Columns.Add("tbDeadNight", Type.GetType("System.String"));dt.Columns.Add("tbOvertime", Type.GetType("System.String"));dt.Columns.Add("tbExOvertime", Type.GetType("System.String"));dt.Columns.Add("tbLateness", Type.GetType("System.String"));dt.Columns.Add("tbEarlyLeave", Type.GetType("System.String"));dt.Columns.Add("tbFlunk", Type.GetType("System.String"));dt.Columns.Add("tbWeekendHol", Type.GetType("System.String"));if (dgv_ReportDayAtt.Rows.Count > 0){//sum12 = "0";for (int rrr = 6; rrr < dgv_ReportDayAtt.Rows.Count; rrr++){dr1 = dt.NewRow();dr1["tbDate"] = dgv_ReportDayAtt.Rows[rrr].Cells[4].Value.ToString();dr1["tbWorkType"] = dgv_ReportDayAtt.Rows[rrr].Cells[6].Value.ToString();dr1["tbWorkIn"] = dgv_ReportDayAtt.Rows[rrr].Cells[7].Value.ToString();dr1["tbWorkOut"] = dgv_ReportDayAtt.Rows[rrr].Cells[8].Value.ToString();dr1["tbWorkTime"] = dgv_ReportDayAtt.Rows[rrr].Cells[9].Value.ToString();dr1["tbEarlyWorkIn"] = dgv_ReportDayAtt.Rows[rrr].Cells[10].Value.ToString();dr1["tbExWorkTime"] = dgv_ReportDayAtt.Rows[rrr].Cells[11].Value.ToString();dr1["tbFoodEx"] = dgv_ReportDayAtt.Rows[rrr].Cells[12].Value.ToString();dr1["tbDeadNight"] = dgv_ReportDayAtt.Rows[rrr].Cells[13].Value.ToString();dr1["tbOvertime"] = dgv_ReportDayAtt.Rows[rrr].Cells[14].Value.ToString();dr1["tbExOvertime"] = dgv_ReportDayAtt.Rows[rrr].Cells[15].Value.ToString();dr1["tbLateness"] = dgv_ReportDayAtt.Rows[rrr].Cells[17].Value.ToString()dr1["tbEarlyLeave"] = dgv_ReportDayAtt.Rows[rrr].Cells[18].Value.ToString();dr1["tbFlunk"] = dgv_ReportDayAtt.Rows[rrr].Cells[19].Value.ToString();dr1["tbWeekendHol"] = dgv_ReportDayAtt.Rows[rrr].Cells["colWeekHoli"].Value.ToString();dt.Rows.Add(dr1);}}try{개인근태현황3 doc = new 개인근태현황3();ⓐ ................. doc.SetDataSource(ds.Tables[2]);doc.SetParameterValue("특이사항", textBox3.Text);// 크리스탈리포트 매개변수 전달doc.SetParameterValue("부서", "부서:" + dgv_UserList.Rows[i].Cells[5].Value.ToString());doc.SetParameterValue("직위", "직위:" + dgv_UserList.Rows[i].Cells[7].Value.ToString());doc.SetParameterValue("성명", "성명:" + dgv_UserList.Rows[i].Cells[8].Value.ToString());doc.SetParameterValue("조회기간", string.Format("조회기간:{0}~{1}", dtpk_FDdate.Value.ToString("yyyy년 M월 d일"), dtpk_TDdate.Value.ToString("yyyy년 M월 d일")));doc.SetParameterValue("사번", "사번:" + dgv_UserList.Rows[i].Cells[10].Value.ToString());doc.SetParameterValue("합계1", string.Format("출근 {0}, 결근 {1}",txtT_Chul.Text,txtT_Gyul.Text));doc.SetParameterValue("합계2", mtxtT_TWorkTime.Text);doc.SetParameterValue("합계3", mtxtT_TJochulTime.Text);doc.SetParameterValue("합계4", mtxtT_TOTTime.Text);doc.SetParameterValue("합계5", mtxtT_TAddOTTime.Text);doc.SetParameterValue("합계6", mtxtT_TYaTime.Text);doc.SetParameterValue("합계7", mtxtT_TTukTime.Text);doc.SetParameterValue("합계8", mtxtT_TTukOTTime.Text);doc.SetParameterValue("합계9", mtxtT_TLateTime.Text);doc.SetParameterValue("합계10", mtxtT_TEarlyTime.Text);doc.SetParameterValue("합계11", mtxtT_TPaidTime.Text);doc.SetParameterValue("합계12", txtT_Juhu.Text);//doc.PrintToPrinter(1, true, 1, 1); 인쇄, 테스트를 위해 잠시 주석처리doc.Close();doc.Dispose();}catch (Exception ex){MessageBox.Show(ex.Message);}}}}원인과 해결 방법을 알아냈다.
내 경우에, 크리스탈리포트에서 보고서를 로드하지 못했습니다.
라고 에러가 나던 원인은 메모리 부족 현상이었다.
데이터베이스에 연결할 때도 작업이 끝나면 꼭 Close()를 해줘야 하는데
이와 비슷한 이유였던 것이다.
크리스탈리포트 문서를 인쇄를 하든, 불러오든 작업이 끝났으면
그 다음엔 doc.Close()와 doc.Dispose()를 해서
더 이상 메모리를 차지하지 않게 하자.
반응형'프로젝트' 카테고리의 다른 글
만들 계획인 윈도우 PC 원격 조종 프로그램 (0) 2017.06.23 C# Winform으로 만든 카카오톡 사용자별 대화통계 프로그램2 (1) 2017.05.26 C# winform으로 만든 카카오톡 사용자별 대화통계 프로그램1 (0) 2017.05.22 파일 업로드를 통한 XSS공격 중 소스코드 관점의 보안 대책 (0) 2016.06.24 HTTP method 제한 테스트 (0) 2016.06.24