S_pot

C#_try-catch-finally문 본문

C#

C#_try-catch-finally문

S_pot 2021. 6. 27. 14:20

try-catch문: try가 감싸고 있던 명령문에서 예외가 발생하면 catch문에 저장된 명령을 실행하도록 함.

예외처리

 private void BM_WokerMaster_Load(object sender, EventArgs e)
        {
            try
            {
                #region < 그리드 셋팅>
                // 그리드 셋팅을 위한                           
                _GridUtil.InitializeGrid(this.grid1, false, true, false, "", false);
                _GridUtil.InitColumnUltraGrid(grid1, "PLANTCODE",  "공장",     true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "WORKERID",   "작업자ID", true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "WORKERNAME", "작업자명", true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "BANCODE",    "작업반",   true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "GRPID",      "그룹",     true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "DEPTCODE",   "부서",     true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "PHONENO",    "전화번호", true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "INDATE",     "입사일자", true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "OUTDATE",    "퇴사일자", true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);
                _GridUtil.InitColumnUltraGrid(grid1, "USEFLAG",    "사용여부", true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, true);      // 마지막부분 true/false는 수정가능 여부를 말한다.
                _GridUtil.InitColumnUltraGrid(grid1, "MAKEDATE",   "등록일시", true, GridColDataType_emu.DateTime24, 130, 200, Infragistics.Win.HAlign.Left, true, false);
                _GridUtil.InitColumnUltraGrid(grid1, "MAKER",      "등록자",   true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, false);
                _GridUtil.InitColumnUltraGrid(grid1, "EDITDATE",   "수정일시", true, GridColDataType_emu.DateTime24, 130, 200, Infragistics.Win.HAlign.Left, true, false);
                _GridUtil.InitColumnUltraGrid(grid1, "EDITOR",     "수정자",   true, GridColDataType_emu.VarChar,    130, 200, Infragistics.Win.HAlign.Left, true, false);
                _GridUtil.SetInitUltraGridBind(grid1);
                #endregion


                Common _Common = new Common();
                DataTable dtTemp = new DataTable(); // DataTable = 데이터를 담는 그릇

                // 공장 콤보박스 설정
                // 공장 그리드에 표현
                dtTemp = _Common.Standard_CODE("PLANTCODE");                              
                Common.FillComboboxMaster(this.cboPlantCode, dtTemp, dtTemp.Columns["CODE_ID"].ColumnName, dtTemp.Columns["CODE_NAME"].ColumnName, "ALL", "");
                UltraGridUtil.SetComboUltraGrid(this.grid1, "PLANTCODE", dtTemp, "CODE_ID", "CODE_NAME");

                // 사용여부 콤보박스 설정
                // 사용여부 그리드에 표현
                dtTemp = _Common.Standard_CODE("USEFLAG");
                Common.FillComboboxMaster(this.cboUseFlag, dtTemp, dtTemp.Columns["CODE_ID"].ColumnName, dtTemp.Columns["CODE_NAME"].ColumnName, "ALL", "");
                UltraGridUtil.SetComboUltraGrid(this.grid1, "USEFLAG", dtTemp, "CODE_ID", "CODE_NAME");

                // 그룹코드 그리드에 표현                
                dtTemp = _Common.Standard_CODE("GRPID");                
                UltraGridUtil.SetComboUltraGrid(this.grid1, "GRPID", dtTemp, "CODE_ID", "CODE_NAME");

                // 반 코드 그리드에 표현
                dtTemp = _Common.Standard_CODE("BANCODE");
                UltraGridUtil.SetComboUltraGrid(this.grid1, "BANCODE", dtTemp, "CODE_ID", "CODE_NAME");

                // 부서 코드 그리드에 표현
                dtTemp = _Common.Standard_CODE("DEPTCODE");
                UltraGridUtil.SetComboUltraGrid(this.grid1, "DEPTCODE", dtTemp, "CODE_ID", "CODE_NAME");

                // 공장 코드 고정
                cboPlantCode.Value = LoginInfo.PlantCode;
            }

            catch (Exception ex)
            {
				// 예외상황 발생 시 실행
                Console.WritLine("에러발생")
                
            }
        }

 

try-catch-finally: 예외가 발생하지 않아도 finally는 무조건 실행됨

 public override void DoSave()
        {
            // 저장버튼 클릭
            DataTable dt = grid1.chkChange();   //chkChange(): 바뀐 구문만 받아옴
            if (dt == null) return; // dt에 대한 내용이 바뀐게 없다면 리턴

            DBHelper helper = new DBHelper("", true);
            try
            {
                if (ShowDialog("등록 내역을 저장하시겠습니까?") == System.Windows.Forms.DialogResult.Cancel)
                {
                    return;
                }
                foreach (DataRow drrow in dt.Rows)  // dt에 있는 것을 한줄 씩 출력
                {
                    switch (drrow.RowState)
                    {
                        case DataRowState.Deleted:  // 행의 상태가 삭제된 상태
                            drrow.RejectChanges(); 
                            helper.ExecuteNoneQuery("14BM_WokerMaster_D1", CommandType.StoredProcedure
                                , helper.CreateParameter("PLANTCODE", Convert.ToString(drrow["PLANTCODE"]), DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("WORKERID" , Convert.ToString(drrow["WORKERID"]) , DbType.String, ParameterDirection.Input)
                                );      
                            break;
                        case DataRowState.Modified: // 행의 상태가 수정된 상태
                            helper.ExecuteNoneQuery("14BM_WokerMaster_U1", CommandType.StoredProcedure
                                , helper.CreateParameter("PLANTCODE",  Convert.ToString(drrow["PLANTCODE"]),  DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("WORKERID",   Convert.ToString(drrow["WORKERID"]),    DbType.String, ParameterDirection.Input)                               
                                , helper.CreateParameter("WORKERNAME", Convert.ToString(drrow["WORKERNAME"]), DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("BANCODE",    Convert.ToString(drrow["BANCODE"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("GRPID",      Convert.ToString(drrow["GRPID"]),      DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("DEPTCODE",   Convert.ToString(drrow["DEPTCODE"]),   DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("PHONENO",    Convert.ToString(drrow["PHONENO"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("INDATE",     Convert.ToString(drrow["INDATE"]),     DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("OUTDATE",    Convert.ToString(drrow["OUTDATE"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("USEFLAG",    Convert.ToString(drrow["USEFLAG"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("EDITOR",     LoginInfo.UserID,                      DbType.String, ParameterDirection.Input)
                                );
                            break;

                        case DataRowState.Added: // 행의 상태가 추가된 상태
                            helper.ExecuteNoneQuery("14BM_WokerMaster_I1", CommandType.StoredProcedure
                                , helper.CreateParameter("PLANTCODE",  Convert.ToString(drrow["PLANTCODE"]),  DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("WORKERID",   Convert.ToString(drrow["WORKERID"]),    DbType.String, ParameterDirection.Input)                               
                                , helper.CreateParameter("WORKERNAME", Convert.ToString(drrow["WORKERNAME"]), DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("BANCODE",    Convert.ToString(drrow["BANCODE"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("GRPID",      Convert.ToString(drrow["GRPID"]),      DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("DEPTCODE",   Convert.ToString(drrow["DEPTCODE"]),   DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("PHONENO",    Convert.ToString(drrow["PHONENO"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("INDATE",     Convert.ToString(drrow["INDATE"]),     DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("OUTDATE",    Convert.ToString(drrow["OUTDATE"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("USEFLAG",    Convert.ToString(drrow["USEFLAG"]),    DbType.String, ParameterDirection.Input)
                                , helper.CreateParameter("MAKER",      LoginInfo.UserID,                      DbType.String, ParameterDirection.Input)
                                );
                            break;
                    }
                    if (helper.RSCODE != "S") break;
                }
                if (helper.RSCODE != "S")
                {   
                    helper.Rollback();
                    // ShowDialog는 다른작업을 못한다.
                    ShowDialog("데이터 등록에 실패 하였습니다", DC00_WinForm.DialogForm.DialogType.OK);
                    return;
                }
                helper.Commit();
                ShowDialog("데이터 등록에 성공 하였습니다", DC00_WinForm.DialogForm.DialogType.OK);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                helper.Rollback();  // 원상복구 시켜라
            }
            finally
            {
                helper.Close();
            }
        }

'C#' 카테고리의 다른 글

C#_MSSQL 서버와 연결하기  (0) 2021.07.15
C#_Split: 입력값 띄어쓰기  (0) 2021.06.27
C#_this키워드를 사용하는이유  (0) 2021.06.27
C#_delegate2:익명메서드, 람다식  (0) 2021.06.14
C#_delegate2:익명메서드, 람다식  (0) 2021.06.14