| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 | using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;using System.Data;using System.IO;using System.Windows.Forms;using System.Drawing;using System.Threading;using FirebirdSql.Data.FirebirdClient;namespace IControls_FireManager{    // 데이타베이스는 여기 클래스에서 전담한다, 단 SQL 쿼리문은 제외함.    public static class _Db     {        public static string DB_FullPath = null;                ///        /// 데이타베이스에 접속 및 쿼리 일반        ///        // 데이타베이스 커넥션 스트링        public static string ConnectionString()        {            return string.Format("Server={0};User={1};Password={2};Database={3};Charset={4};ServerType={5}",                                        "127.0.0.1",        // IP ex)192.168.63.22                                         "SYSDBA",   // 사용자                                         "masterkey",  // 암호                                         DB_FullPath,      // 절대위치.. ex) C:\TEST\TEST.FDB                                         "KSC_5601",         // KSC_5601 같은 문자셋을 지정                                         "0");               // 0이면 Classic/Super Server, 1이면 Embedded Server를 지정하신다음...         }        // 데이타베이스 접속 상태 테스트 (프로그램 시작 혹은 접속세션이 끊어질 경우 다시 접속하는 경우)        // Fail_LOG : 실패 로그 표시 (true 인 경우에만 실패 로그를 출력한다)        public static bool OpenTest()        {            FbConnection CheckFbConnection = null;            bool ret = false;            try            {                   string TestConnection = null;                TestConnection = ConnectionString();                // 테스트                                if (CheckFbConnection != null) CheckFbConnection.Close();                CheckFbConnection = new FbConnection(TestConnection);                CheckFbConnection.Open();                ret = (CheckFbConnection.State == ConnectionState.Open);                if (ret == true)                {                    // 직전에 실패였다면 성공 LOG                      //if (_Data.DB_Connection_Open_Ok == false)                    //{                    //    // LOG                       //    _Event.DebugView_SendMessage_Write(_Text.Blank + _Text.LeftBracket + TestConnection + _Text.RightBracket + _Text.Blank + _Text.LOG_DB_Connection_Ok);                    //    // 데이타베이스로 부터 정보를 읽어들임                    //    //if (_Db.GET_DB_DEVICE_INFO() == true) _Event.DebugView_SendMessage_Write(_Text.LOG_DB_Device_Read_Ok);                    //    //// 데이타베이스 재접속하므로 다시 UI 셋팅                    //    //_Event.DbUpdate_SendMessage_Write(true);                    //}                    //// 접속성공                    //_Data.DB_Connection_Open_Ok = true;                }                if (CheckFbConnection != null) CheckFbConnection.Dispose();                return ret;            }            catch //(Exception e)            {                  // 직전에 성공이였다면 실패 LOG (단 처음부터 실패할 경우도 생기므로 처리함                //if (_Data.DB_Connection_Open_Ok == true || _Data.DB_Connection_FailLogOnce == false)                //{                //    _Event.DebugView_SendMessage_Write(e.ToString());                //    _Data.DB_Connection_FailLogOnce = true;                //}                //// 접속실패                //_Data.DB_Connection_Open_Ok = false;                if (CheckFbConnection != null) CheckFbConnection.Close();                return false;            }        }        // 쓰기        // 데이타베이스 접속후        // SQL 쿼리 전송         // 세션 종료        public static void Execute(string SQL)        {            // 접속 세션            FbConnection session = null;            // 접속된 상태의 명령어            FbCommand command = null;            // 접속 세션 주소            string address = null;            try            {                // 접속 세션 주소 셋팅                address = ConnectionString();                               // 상위 문구를 신뢰하고 보내는 루틴                session = new FbConnection(address);                session.Open();                command = new FbCommand(SQL, session);                command.ExecuteNonQuery();                if (session != null) session.Close();                if (command != null) command.Dispose();            }            catch //(Exception e)            {                // LOG                                //_Event.DebugView_SendMessage_Write(e.ToString() + "SQL:" + SQL);                if (session != null) session.Close();                if (command != null) command.Dispose();            }        }        // 읽기        // 데이타베이스 접속후        // SQL 쿼리 전송         // 세션 종료        // 쿼리 결과는 리턴 (데이타베이스 접속상태 상관없는 비연결형으로 사용하는 경우)        public static DataRowCollection ExecuteRead_SqlDataAdapter(string SQL)        {            // 접속 세션            FbConnection session = null;            // 접속된 상태의 명령어            FbCommand command = null;            // 접속 세션 주소            string address = null;            // 접속 아답터                       FbDataAdapter dataAdapter = null;            DataSet dataSet = null;            try            {                // 접속 세션 주소 셋팅                address = ConnectionString();                //// 상위 문구를 신뢰하고 보내는 루틴                session = new FbConnection(address);                session.Open();                command = new FbCommand(SQL, session);                dataAdapter = new FbDataAdapter(SQL, session);                dataAdapter.SelectCommand = command;                dataSet = new DataSet();                dataAdapter.Fill(dataSet, "GetData");                if (dataAdapter != null) dataAdapter.Dispose();                if (session != null) session.Close();                if (command != null) command.Dispose();                if (dataSet != null) dataSet.Dispose();                return dataSet.Tables["GetData"].Rows;            }            catch //(Exception e)            {                // LOG                                //_Event.DebugView_SendMessage_Write(e.ToString());                if (dataAdapter != null) dataAdapter.Dispose();                if (session != null) session.Close();                if (command != null) command.Dispose();                if (dataSet != null) dataSet.Dispose();                return null;            }        }                        ///        /// 쿼리의 조합 및 특정 동작 수행        ///        // 특정 Table의 특정 Column에 최대값 찾기        public static int MAX_ColumnValue(string TableName, string Column)        {            DataRowCollection DB_Search_ColumnMaxValue = ExecuteRead_SqlDataAdapter(_Sql.Get_ColumnMaxValue(TableName, Column));            int MaxValue = 0;            try            {                  foreach (DataRow Record in DB_Search_ColumnMaxValue)                {                    // 데이타가 아무것도 없다                    if (Record[0].ToString().Length == 0)                        return 1;                    //DB에 저장되어 있는 레코드 수를 알자                    MaxValue = Int32.Parse(Record[0].ToString());                }                return MaxValue + 1;            }            catch //(Exception e)             {                // LOG                                //_Event.DebugView_SendMessage_Write(e.ToString());                return 1;            }                    }        // DB 삽입                // Key_Data 의 예시 "Key1=Data1;Key2=Data2"         // ex) _Db.ADD("TB_TEST", "ID=1;DATA=slrclub");        //     -> 이는 TB_TEST 테이블에 ID 컬럼에 1 값, DATA 컬럼에 slrclub 을 넣게된다 (int, string 데이타 호환은 되므로 스트링 형태로 삽입하면 됩니다)        public static void ADD(string Table_Name, string Key_Data)        {            try            {                // SQL 생성부                string strSQL = null;                string tempSQL = null;                strSQL = "insert into " + Table_Name + "(";                // 속성 이름 임시 저장소                string Temp_Names = _Convert.String_to_Key_Data(Key_Data, true, false);                 // 제거 문자대로 분리시켜버림                string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);                // 속성 값 임시 저장소                string Temp_Values = _Convert.String_to_Key_Data(Key_Data, false, false);                 // 제거 문자대로 분리시켜버림                string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);                // 개수만큼 만들어서 컬럼 생성                tempSQL = null;                for (int i = 0; i < Column_Names.Length; i++)                    tempSQL = tempSQL + Column_Names[i] + ",";                // 끝문자 제거                strSQL = strSQL + tempSQL.TrimEnd(',') + ") values (";                // 개수만큼 만들어서 속성 값 생성                tempSQL = null;                for (int i = 0; i < Column_Values.Length; i++)                    tempSQL = tempSQL + "'" + Column_Values[i] + "'" + ",";                // 끝문자 제거                strSQL = strSQL + tempSQL.TrimEnd(',') + ")";                // SQL 실행부                _Db.Execute(strSQL);            }            catch //(Exception e)            {                // LOG                                //_Event.DebugView_SendMessage_Write(e.ToString());            }        }        // DB 편집        // 단, 테스트 결과 Update 를 하는 경우 INT 속성을 가지고 있는 컬럼에 String 데이터로 변경하지 못한다, 반면 반대의 경우는 허용한다.        // Key_Data 의 예시 "Key1=Data1;Key2=Data2"         public static void UPDATE(string Table_Name, string Target_Key_Data, string Key_Data)         {            try            {                // SQL 생성부                string strSQL = null;                string tempSQL = null;                strSQL = "update " + Table_Name + " set ";                // 속성 이름 임시 저장소                string Temp_Names = _Convert.String_to_Key_Data(Key_Data, true, false);                 // 제거 문자대로 분리시켜버림                string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);                // 속성 값 임시 저장소                string Temp_Values = _Convert.String_to_Key_Data(Key_Data, false, false);                 // 제거 문자대로 분리시켜버림                string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);                // 편집하려는 컬럼 개수만큼 , 를 추가한다                for (int i = 0; i < Column_Names.Length; i++)                    tempSQL = tempSQL + Column_Names[i] + "='" + Column_Values[i] + "'" + ",";                // 끝문자 제거                strSQL = strSQL + tempSQL.TrimEnd(',');                // 조건절 추가                strSQL = strSQL + " where ";//+ Target_Column_Name + "='" + Target_Column_Value + "'";                                // 하위코드는 다중으로 where 절을 사용할수 있도록 추가한다                                // 초기화                                tempSQL = null;                // 속성 이름 임시 저장소                string Temp_Names_Target = _Convert.String_to_Key_Data(Target_Key_Data, true, false);                // 제거 문자대로 분리시켜버림                string[] Column_Names_Target = Temp_Names_Target.Split(_Convert.Result_Char);                // 속성 값 임시 저장소                string Temp_Values_Target = _Convert.String_to_Key_Data(Target_Key_Data, false, false);                // 제거 문자대로 분리시켜버림                string[] Column_Values_Target = Temp_Values_Target.Split(_Convert.Result_Char);                // 편집하려는 컬럼 개수만큼 , 를 추가한다                for (int i = 0; i < Column_Names_Target.Length; i++)                    tempSQL = tempSQL + Column_Names_Target[i] + "='" + Column_Values_Target[i] + "' and ";                // 끝문자 제거                strSQL = strSQL + tempSQL.Remove(tempSQL.Length - 5);                // SQL 실행부                _Db.Execute(strSQL);            }            catch //(Exception e)            {                // LOG                                //_Event.DebugView_SendMessage_Write(e.ToString());            }        }        // 기존 프로젝트와 호환을 위해 특별처리 (TB_CONFIG 가 필드가 추가됨)        //public static string TB_Config_ACCESS_EXCEPTION()        //{        //    string SQL = null;        //    Execute("ALTER TABLE TB_CONFIG ADD TEST_RUN_FLAG VARCHAR(1);");        //    Execute(" UPDATE TB_CONFIG SET TEST_RUN_FLAG='N';");        //    Execute(" COMMIT;");         //    return SQL;        //}    }}
 |