170b4103acd9561d14703f0564816c25b6b7846b.svn-base 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data.SqlClient;
  5. using System.Data;
  6. using System.IO;
  7. using System.Windows.Forms;
  8. using System.Drawing;
  9. using System.Threading;
  10. using FirebirdSql.Data.FirebirdClient;
  11. namespace IControls_FireManager
  12. {
  13. // 데이타베이스는 여기 클래스에서 전담한다, 단 SQL 쿼리문은 제외함.
  14. public static class _Db
  15. {
  16. public static string DB_FullPath = null;
  17. ///
  18. /// 데이타베이스에 접속 및 쿼리 일반
  19. ///
  20. // 데이타베이스 커넥션 스트링
  21. public static string ConnectionString()
  22. {
  23. return string.Format("Server={0};User={1};Password={2};Database={3};Charset={4};ServerType={5}",
  24. "127.0.0.1", // IP ex)192.168.63.22
  25. "SYSDBA", // 사용자
  26. "masterkey", // 암호
  27. DB_FullPath, // 절대위치.. ex) C:\TEST\TEST.FDB
  28. "KSC_5601", // KSC_5601 같은 문자셋을 지정
  29. "0"); // 0이면 Classic/Super Server, 1이면 Embedded Server를 지정하신다음...
  30. }
  31. // 데이타베이스 접속 상태 테스트 (프로그램 시작 혹은 접속세션이 끊어질 경우 다시 접속하는 경우)
  32. // Fail_LOG : 실패 로그 표시 (true 인 경우에만 실패 로그를 출력한다)
  33. public static bool OpenTest()
  34. {
  35. FbConnection CheckFbConnection = null;
  36. bool ret = false;
  37. try
  38. {
  39. string TestConnection = null;
  40. TestConnection = ConnectionString();
  41. // 테스트
  42. if (CheckFbConnection != null) CheckFbConnection.Close();
  43. CheckFbConnection = new FbConnection(TestConnection);
  44. CheckFbConnection.Open();
  45. ret = (CheckFbConnection.State == ConnectionState.Open);
  46. if (ret == true)
  47. {
  48. // 직전에 실패였다면 성공 LOG
  49. //if (_Data.DB_Connection_Open_Ok == false)
  50. //{
  51. // // LOG
  52. // _Event.DebugView_SendMessage_Write(_Text.Blank + _Text.LeftBracket + TestConnection + _Text.RightBracket + _Text.Blank + _Text.LOG_DB_Connection_Ok);
  53. // // 데이타베이스로 부터 정보를 읽어들임
  54. // //if (_Db.GET_DB_DEVICE_INFO() == true) _Event.DebugView_SendMessage_Write(_Text.LOG_DB_Device_Read_Ok);
  55. // //// 데이타베이스 재접속하므로 다시 UI 셋팅
  56. // //_Event.DbUpdate_SendMessage_Write(true);
  57. //}
  58. //// 접속성공
  59. //_Data.DB_Connection_Open_Ok = true;
  60. }
  61. if (CheckFbConnection != null) CheckFbConnection.Dispose();
  62. return ret;
  63. }
  64. catch //(Exception e)
  65. {
  66. // 직전에 성공이였다면 실패 LOG (단 처음부터 실패할 경우도 생기므로 처리함
  67. //if (_Data.DB_Connection_Open_Ok == true || _Data.DB_Connection_FailLogOnce == false)
  68. //{
  69. // _Event.DebugView_SendMessage_Write(e.ToString());
  70. // _Data.DB_Connection_FailLogOnce = true;
  71. //}
  72. //// 접속실패
  73. //_Data.DB_Connection_Open_Ok = false;
  74. if (CheckFbConnection != null) CheckFbConnection.Close();
  75. return false;
  76. }
  77. }
  78. // 쓰기
  79. // 데이타베이스 접속후
  80. // SQL 쿼리 전송
  81. // 세션 종료
  82. public static void Execute(string SQL)
  83. {
  84. // 접속 세션
  85. FbConnection session = null;
  86. // 접속된 상태의 명령어
  87. FbCommand command = null;
  88. // 접속 세션 주소
  89. string address = null;
  90. try
  91. {
  92. // 접속 세션 주소 셋팅
  93. address = ConnectionString();
  94. // 상위 문구를 신뢰하고 보내는 루틴
  95. session = new FbConnection(address);
  96. session.Open();
  97. command = new FbCommand(SQL, session);
  98. command.ExecuteNonQuery();
  99. if (session != null) session.Close();
  100. if (command != null) command.Dispose();
  101. }
  102. catch //(Exception e)
  103. {
  104. // LOG
  105. //_Event.DebugView_SendMessage_Write(e.ToString() + "SQL:" + SQL);
  106. if (session != null) session.Close();
  107. if (command != null) command.Dispose();
  108. }
  109. }
  110. // 읽기
  111. // 데이타베이스 접속후
  112. // SQL 쿼리 전송
  113. // 세션 종료
  114. // 쿼리 결과는 리턴 (데이타베이스 접속상태 상관없는 비연결형으로 사용하는 경우)
  115. public static DataRowCollection ExecuteRead_SqlDataAdapter(string SQL)
  116. {
  117. // 접속 세션
  118. FbConnection session = null;
  119. // 접속된 상태의 명령어
  120. FbCommand command = null;
  121. // 접속 세션 주소
  122. string address = null;
  123. // 접속 아답터
  124. FbDataAdapter dataAdapter = null;
  125. DataSet dataSet = null;
  126. try
  127. {
  128. // 접속 세션 주소 셋팅
  129. address = ConnectionString();
  130. //// 상위 문구를 신뢰하고 보내는 루틴
  131. session = new FbConnection(address);
  132. session.Open();
  133. command = new FbCommand(SQL, session);
  134. dataAdapter = new FbDataAdapter(SQL, session);
  135. dataAdapter.SelectCommand = command;
  136. dataSet = new DataSet();
  137. dataAdapter.Fill(dataSet, "GetData");
  138. if (dataAdapter != null) dataAdapter.Dispose();
  139. if (session != null) session.Close();
  140. if (command != null) command.Dispose();
  141. if (dataSet != null) dataSet.Dispose();
  142. return dataSet.Tables["GetData"].Rows;
  143. }
  144. catch //(Exception e)
  145. {
  146. // LOG
  147. //_Event.DebugView_SendMessage_Write(e.ToString());
  148. if (dataAdapter != null) dataAdapter.Dispose();
  149. if (session != null) session.Close();
  150. if (command != null) command.Dispose();
  151. if (dataSet != null) dataSet.Dispose();
  152. return null;
  153. }
  154. }
  155. ///
  156. /// 쿼리의 조합 및 특정 동작 수행
  157. ///
  158. // 특정 Table의 특정 Column에 최대값 찾기
  159. public static int MAX_ColumnValue(string TableName, string Column)
  160. {
  161. DataRowCollection DB_Search_ColumnMaxValue = ExecuteRead_SqlDataAdapter(_Sql.Get_ColumnMaxValue(TableName, Column));
  162. int MaxValue = 0;
  163. try
  164. {
  165. foreach (DataRow Record in DB_Search_ColumnMaxValue)
  166. {
  167. // 데이타가 아무것도 없다
  168. if (Record[0].ToString().Length == 0)
  169. return 1;
  170. //DB에 저장되어 있는 레코드 수를 알자
  171. MaxValue = Int32.Parse(Record[0].ToString());
  172. }
  173. return MaxValue + 1;
  174. }
  175. catch //(Exception e)
  176. {
  177. // LOG
  178. //_Event.DebugView_SendMessage_Write(e.ToString());
  179. return 1;
  180. }
  181. }
  182. // DB 삽입
  183. // Key_Data 의 예시 "Key1=Data1;Key2=Data2"
  184. // ex) _Db.ADD("TB_TEST", "ID=1;DATA=slrclub");
  185. // -> 이는 TB_TEST 테이블에 ID 컬럼에 1 값, DATA 컬럼에 slrclub 을 넣게된다 (int, string 데이타 호환은 되므로 스트링 형태로 삽입하면 됩니다)
  186. public static void ADD(string Table_Name, string Key_Data)
  187. {
  188. try
  189. {
  190. // SQL 생성부
  191. string strSQL = null;
  192. string tempSQL = null;
  193. strSQL = "insert into " + Table_Name + "(";
  194. // 속성 이름 임시 저장소
  195. string Temp_Names = _Convert.String_to_Key_Data(Key_Data, true, false);
  196. // 제거 문자대로 분리시켜버림
  197. string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);
  198. // 속성 값 임시 저장소
  199. string Temp_Values = _Convert.String_to_Key_Data(Key_Data, false, false);
  200. // 제거 문자대로 분리시켜버림
  201. string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);
  202. // 개수만큼 만들어서 컬럼 생성
  203. tempSQL = null;
  204. for (int i = 0; i < Column_Names.Length; i++)
  205. tempSQL = tempSQL + Column_Names[i] + ",";
  206. // 끝문자 제거
  207. strSQL = strSQL + tempSQL.TrimEnd(',') + ") values (";
  208. // 개수만큼 만들어서 속성 값 생성
  209. tempSQL = null;
  210. for (int i = 0; i < Column_Values.Length; i++)
  211. tempSQL = tempSQL + "'" + Column_Values[i] + "'" + ",";
  212. // 끝문자 제거
  213. strSQL = strSQL + tempSQL.TrimEnd(',') + ")";
  214. // SQL 실행부
  215. _Db.Execute(strSQL);
  216. }
  217. catch //(Exception e)
  218. {
  219. // LOG
  220. //_Event.DebugView_SendMessage_Write(e.ToString());
  221. }
  222. }
  223. // DB 편집
  224. // 단, 테스트 결과 Update 를 하는 경우 INT 속성을 가지고 있는 컬럼에 String 데이터로 변경하지 못한다, 반면 반대의 경우는 허용한다.
  225. // Key_Data 의 예시 "Key1=Data1;Key2=Data2"
  226. public static void UPDATE(string Table_Name, string Target_Key_Data, string Key_Data)
  227. {
  228. try
  229. {
  230. // SQL 생성부
  231. string strSQL = null;
  232. string tempSQL = null;
  233. strSQL = "update " + Table_Name + " set ";
  234. // 속성 이름 임시 저장소
  235. string Temp_Names = _Convert.String_to_Key_Data(Key_Data, true, false);
  236. // 제거 문자대로 분리시켜버림
  237. string[] Column_Names = Temp_Names.Split(_Convert.Result_Char);
  238. // 속성 값 임시 저장소
  239. string Temp_Values = _Convert.String_to_Key_Data(Key_Data, false, false);
  240. // 제거 문자대로 분리시켜버림
  241. string[] Column_Values = Temp_Values.Split(_Convert.Result_Char);
  242. // 편집하려는 컬럼 개수만큼 , 를 추가한다
  243. for (int i = 0; i < Column_Names.Length; i++)
  244. tempSQL = tempSQL + Column_Names[i] + "='" + Column_Values[i] + "'" + ",";
  245. // 끝문자 제거
  246. strSQL = strSQL + tempSQL.TrimEnd(',');
  247. // 조건절 추가
  248. strSQL = strSQL + " where ";//+ Target_Column_Name + "='" + Target_Column_Value + "'";
  249. // 하위코드는 다중으로 where 절을 사용할수 있도록 추가한다
  250. // 초기화
  251. tempSQL = null;
  252. // 속성 이름 임시 저장소
  253. string Temp_Names_Target = _Convert.String_to_Key_Data(Target_Key_Data, true, false);
  254. // 제거 문자대로 분리시켜버림
  255. string[] Column_Names_Target = Temp_Names_Target.Split(_Convert.Result_Char);
  256. // 속성 값 임시 저장소
  257. string Temp_Values_Target = _Convert.String_to_Key_Data(Target_Key_Data, false, false);
  258. // 제거 문자대로 분리시켜버림
  259. string[] Column_Values_Target = Temp_Values_Target.Split(_Convert.Result_Char);
  260. // 편집하려는 컬럼 개수만큼 , 를 추가한다
  261. for (int i = 0; i < Column_Names_Target.Length; i++)
  262. tempSQL = tempSQL + Column_Names_Target[i] + "='" + Column_Values_Target[i] + "' and ";
  263. // 끝문자 제거
  264. strSQL = strSQL + tempSQL.Remove(tempSQL.Length - 5);
  265. // SQL 실행부
  266. _Db.Execute(strSQL);
  267. }
  268. catch //(Exception e)
  269. {
  270. // LOG
  271. //_Event.DebugView_SendMessage_Write(e.ToString());
  272. }
  273. }
  274. // 기존 프로젝트와 호환을 위해 특별처리 (TB_CONFIG 가 필드가 추가됨)
  275. //public static string TB_Config_ACCESS_EXCEPTION()
  276. //{
  277. // string SQL = null;
  278. // Execute("ALTER TABLE TB_CONFIG ADD TEST_RUN_FLAG VARCHAR(1);");
  279. // Execute(" UPDATE TB_CONFIG SET TEST_RUN_FLAG='N';");
  280. // Execute(" COMMIT;");
  281. // return SQL;
  282. //}
  283. }
  284. }