////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 데이터베이스 데이터 불러오기( Select ) //설명 : strQuery : 데이터베이스에 실행할 쿼리 / objDataTable : 메모리 내 데이터의 한 테이블 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public CErrorReturn HLReload(string strQuery, ref DataTable objDataTable) { CErrorReturn objReturn = new CErrorReturn("CSQLite", "HLReload"); do { try { SQLiteDataAdapter objSQLiteDataAdapter = new SQLiteDataAdapter(strQuery, m_strConnection); // 쿼리문 Trace //Trace.WriteLine( System.DateTime.Now.ToString( "yyyy/MM/dd hh:mm:ss" ) + " Query : " + strQuery ); // 콜백 호출 if (null != _callBackQueryMessage) { _callBackQueryMessage(strQuery); } // 이름을 사용하여 지정된 범위에서 데이터 소스의 행과 일치하도록 행을 추가하거나 새로 고칩니다. objSQLiteDataAdapter.Fill(objDataTable); } catch (Exception ex) { Trace.WriteLine(ex.Message); objReturn.m_strErrorMessage = ex.Message; break; } objReturn.m_bError = false; } while(false); return(objReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 초기화 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public CErrorReturn HLInitialize(string strDatabaseFullPath) { CErrorReturn objReturn = new CErrorReturn("CSQLite", "HLInitialize"); do { // 이름 제외한 폴더 경로 string strDatabasePathOnly = Path.GetDirectoryName(strDatabaseFullPath); // 파일 이름 (확장자를 포함) string strDatabaseExtendName = Path.GetFileName(strDatabaseFullPath); // 확장자를 제거한 파일 이름 string strDatabaseName = Path.GetFileNameWithoutExtension(strDatabaseFullPath); // 데이터베이스 경로랑 이름만 _strDatabasePath = strDatabasePathOnly; _strDatabaseName = strDatabaseName; // 데이퍼베이스 폴더 유무 체크 if (false == Directory.Exists(strDatabasePathOnly)) { // 폴더가 없으면 생성 Directory.CreateDirectory(strDatabasePathOnly); } // 데이터베이스 파일 유무 체크 if (false == File.Exists(strDatabaseFullPath)) { // db3 생성 SQLiteConnection.CreateFile(strDatabaseFullPath); } // 확장자 포함해서 연결 m_strConnection = string.Format(@"Data Source={0}\{1}", m_strDatabasePath, strDatabaseExtendName); objReturn.m_bError = false; } while(false); return(objReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 연결 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public CErrorReturn HLConnect() { CErrorReturn objReturn = new CErrorReturn("CSQLite", "HLConnect"); do { try { m_objSQLiteConnection = new SQLiteConnection(m_strConnection); m_objSQLiteCommand = new SQLiteCommand(); // 연결된 데이터베이스랑 커맨드 1:1 매칭 m_objSQLiteCommand.Connection = m_objSQLiteConnection; // 이벤트 등록 m_objSQLiteConnection.Commit += new SQLiteCommitHandler(OnEventCommit); m_objSQLiteConnection.RollBack += new EventHandler(OnEventRollback); // sql 통신 열어줌 m_objSQLiteConnection.Open(); } catch (Exception ex) { Trace.WriteLine(ex.Message); objReturn.m_strErrorMessage = ex.Message; break; } objReturn.m_bError = false; } while(false); return(objReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 실행( Insert, Update, Delete ) //설명 : strQuery : 데이터베이스에 실행할 쿼리 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public CErrorReturn HLExecute(string strQuery) { CErrorReturn objReturn = new CErrorReturn("CSQLite", "HLExecute"); do { try { // sql 쿼리문 넣어줌 m_objSQLiteCommand.CommandText = strQuery; // 쿼리문 Trace //Trace.WriteLine( System.DateTime.Now.ToString( "yyyy/MM/dd hh:mm:ss" ) + " Query : " + strQuery ); // 콜백 호출 if (null != _callBackQueryMessage) { _callBackQueryMessage(strQuery); } // 연결에 대한 Transact-SQL 문을 실행하고 영향을 받는 행의 수를 반환합니다. m_objSQLiteCommand.ExecuteNonQuery(); } catch (Exception ex) { Trace.WriteLine(ex.Message); objReturn.m_strErrorMessage = ex.Message; break; } objReturn.m_bError = false; } while(false); return(objReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 테이블 생성 //설명 : strTableName : 생성 테이블 이름 / strCreate : 생성 쿼리 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private bool HLSetTableCreate(string strTableName, string strCreate) { bool bReturn = false; do { string strQuery = null; // 데이터베이스에서 delete 명령으로 값을 삭제할 때 실제 항목을 삭제하기 위해 테이블 생성 전에 해당 쿼리를 날려줌 strQuery = "pragma auto_vacuum = 1"; CErrorReturn objReturn = m_objSQLite.HLExecute(strQuery); if (true == objReturn.m_bError) { break; } strQuery = string.Format("create table if not exists {0} ( {1} )", strTableName, strCreate); objReturn = m_objSQLite.HLExecute(strQuery); if (true == objReturn.m_bError) { break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 테이블 데이터 삽입 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private bool HLSetTableDataInsert(string strTableName, DataTable objDataTable) { bool bReturn = false; do { try { string strQuery = ""; // 트랜잭션 시작 SQLiteTransaction objTransaction = m_objSQLite.HLBeginTransaction(); // INSERT 해야 하는 데이터 테이블 레코드 수만큼 for (int iLoopRow = 0; iLoopRow < objDataTable.Rows.Count; iLoopRow++) { string strValues = ""; DataRow objDataRow = objDataTable.Rows[iLoopRow]; strQuery = string.Format("insert into {0} values", strTableName); // 테이블에 정의된 스키마 타입 개수만큼 for (int iLoopSchema = 0; iLoopSchema < m_strTableSchemaType.Length; iLoopSchema++) { // 타입 검사 if ("INTEGER" == m_strTableSchemaType[iLoopSchema]) { strValues += string.Format("{0}", Convert.ToInt32(objDataRow[iLoopSchema])); } else if (true == m_strTableSchemaType[iLoopSchema].Contains("VARCHAR")) { strValues += string.Format("'{0}'", objDataRow[iLoopSchema].ToString()); } else if ("REAL" == m_strTableSchemaType[iLoopSchema] || "DOUBLE" == m_strTableSchemaType[iLoopSchema]) { strValues += string.Format("{0}", Convert.ToDouble(objDataRow[iLoopSchema])); } if (iLoopSchema != m_strTableSchemaType.Length - 1) { strValues += ","; } } // INSERT 쿼리문 strQuery = string.Format("{0} ({1})", strQuery, strValues); // 쿼리문 수행 CErrorReturn objReturn = m_objSQLite.HLExecute(strQuery); if (true == objReturn.m_bError) { Trace.WriteLine(objReturn.m_strErrorMessage); } } // 문제 없으면 트랜잭션 커밋 m_objSQLite.HLCommit(objTransaction); } catch (Exception ex) { Trace.WriteLine(ex.Message); } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 초기화 함수 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public bool Initialize(CProcessDatabase objProcessDatabase) { bool bReturn = false; var pDocument = CDocument.GetDocument; do { // 상위 클래스 이어줌 base.m_objProcessDatabase = objProcessDatabase; CConfig objConfig = pDocument.m_objConfig; // 데이터베이스 파라메터 CConfig.CDatabaseParameter objDatabaseParameter = objConfig.GetDatabaseParameter(); // SQLite 초기화 m_objSQLite = new CSQLite(); CErrorReturn objReturn = m_objSQLite.HLInitialize(string.Format(@"{0}\{1}.db3", objConfig.GetDatabaseHistoryPath(), objDatabaseParameter.strDatabaseHistory)); if (true == objReturn.m_bError) { break; } // SQLite Connect objReturn = m_objSQLite.HLConnect(); if (true == objReturn.m_bError) { break; } // History Align 초기화 m_objManagerTableHistoryAlign = new CManagerTable(); if (false == m_objManagerTableHistoryAlign.HLInitialize( m_objSQLite, string.Format(@"{0}\{1}.txt", objConfig.GetDatabaseTablePath(), objDatabaseParameter.strTableHistoryAlign), "")) { break; } // // History Inspection 초기화 // m_objManagerTableHistoryInspection = new CManagerTable(); // if( false == m_objManagerTableHistoryInspection.HLInitialize( // m_objSQLite, // string.Format( @"{0}\{1}.txt", objConfig.GetDatabaseTablePath(), objDatabaseParameter.strTableHistoryInspection ), "" ) ) break; // Process History Delete 초기화 m_objProcessDatabaseHistoryDelete = new CProcessDatabaseHistoryDelete(); if (false == m_objProcessDatabaseHistoryDelete.Initialize(m_objProcessDatabase, m_objSQLite)) { break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 초기화 함수 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public bool Initialize(CProcessDatabase objProcessDatabase) { bool bReturn = false; var pDocument = CDocument.GetDocument; do { // 상위 클래스 이어줌 base.m_objProcessDatabase = objProcessDatabase; CConfig objConfig = pDocument.m_objConfig; // 데이터베이스 파라메터 CConfig.CDatabaseParameter objDatabaseParameter = objConfig.GetDatabaseParameter(); // SQLite 초기화 m_objSQLite = new CSQLite(); CErrorReturn objReturn = m_objSQLite.HLInitialize(string.Format(@"{0}\{1}.db3", objConfig.GetCurrentPath(), objDatabaseParameter.strDatabaseInformation)); if (true == objReturn.m_bError) { break; } // SQLite Connect objReturn = m_objSQLite.HLConnect(); if (true == objReturn.m_bError) { break; } // Information UI Text 초기화 m_objManagerTableInformationUIText = new CManagerTable(); if (false == m_objManagerTableInformationUIText.HLInitialize( m_objSQLite, string.Format(@"{0}\{1}.txt", objConfig.GetDatabaseTablePath(), objDatabaseParameter.strTableInformationUIText), string.Format(@"{0}\{1}.txt", objConfig.GetDatabaseRecordPath(), objDatabaseParameter.strRecordInformationUIText))) { break; } // Information User Message 초기화 m_objManagerTableInformationUserMessage = new CManagerTable(); if (false == m_objManagerTableInformationUserMessage.HLInitialize( m_objSQLite, string.Format(@"{0}\{1}.txt", objConfig.GetDatabaseTablePath(), objDatabaseParameter.strTableInformationUserMessage), string.Format(@"{0}\{1}.txt", objConfig.GetDatabaseRecordPath(), objDatabaseParameter.strRecordInformationUserMessage))) { break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : Get Table Information //설명 : 테이블 스키마 정보 받음 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private bool HLGetTableInformation(string strTableName, ref DataTable objDataTable) { bool bReturn = false; do { string strQuery = string.Format("pragma table_info({0})", strTableName); CErrorReturn objReturn = m_objSQLite.HLReload(strQuery, ref objDataTable); if (true == objReturn.m_bError) { break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : 테이블 데이터 삭제 //설명 : ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private bool HLSetTableDataDelete(string strTableName) { bool bReturn = false; do { string strQuery = string.Format("delete from {0}", strTableName); CErrorReturn objReturn = m_objSQLite.HLExecute(strQuery); if (true == objReturn.m_bError) { break; } bReturn = true; } while(false); return(bReturn); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //생성 : //추가 : //목적 : Get Table Existence //설명 : 테이블 존재 유무 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private bool HLGetTableExistence(string strTableName, ref bool bExistence) { bool bReturn = false; do { string strQuery = string.Format("select count(*) from sqlite_master where name = '{0}'", strTableName); DataTable objDataTable = new DataTable(); CErrorReturn objReturn = m_objSQLite.HLReload(strQuery, ref objDataTable); if (true == objReturn.m_bError) { break; } // 테이블 존재 유무 결과 받음 bExistence = Convert.ToBoolean(objDataTable.Rows[0][0]); bReturn = true; } while(false); return(bReturn); }