OdbcHelper.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Data.Odbc;
  6. using System.Data.OracleClient;
  7. using XmlDucumentAnalysis;
  8. namespace DataPumpWindowsService
  9. {
  10. public class OdbcHelper
  11. {
  12. private string _message = "";//返回信息
  13. public OdbcConnection _con_SQL;//连接对象
  14. public string Message { get { return _message; } }
  15. public OdbcHelper(string connecteString)
  16. {
  17. _con_SQL = new OdbcConnection(connecteString);
  18. }
  19. #region 命令、事务、连接
  20. /// <summary>
  21. /// 创建命令对象
  22. /// </summary>
  23. /// <returns></returns>
  24. private OdbcCommand CreateCommand()
  25. {
  26. OdbcCommand cmdObj = _con_SQL.CreateCommand();
  27. cmdObj.CommandTimeout = int.MaxValue;
  28. return cmdObj;
  29. }
  30. /// <summary>
  31. /// 打开连接
  32. /// </summary>
  33. /// <returns></returns>
  34. public bool OpenConnection()
  35. {
  36. //检测连接是否已打开
  37. if (_con_SQL.State == System.Data.ConnectionState.Open)
  38. return true;
  39. try
  40. {
  41. _con_SQL.Open();
  42. }
  43. catch (Exception ex)
  44. {
  45. _message = ex.Message;
  46. Log.Debug(ex);
  47. return false;
  48. }
  49. //检测连接状态
  50. if (_con_SQL.State != System.Data.ConnectionState.Open)
  51. {
  52. _message = "打开连接失败";
  53. return false;
  54. }
  55. return true;
  56. }
  57. /// <summary>
  58. /// 关闭连接
  59. /// </summary>
  60. /// <returns></returns>
  61. public bool CloseConnection()
  62. {
  63. if (_con_SQL.State == System.Data.ConnectionState.Closed)
  64. return true;
  65. try
  66. {
  67. _con_SQL.Close();
  68. }
  69. catch (Exception ex)
  70. {
  71. _message = ex.Message;
  72. Log.Debug(ex);
  73. return false;
  74. }
  75. if (_con_SQL.State != System.Data.ConnectionState.Closed)
  76. {
  77. _message = "关闭连接失败";
  78. return false;
  79. }
  80. return true;
  81. }
  82. #endregion
  83. #region 执行无返回值的sql语句
  84. /// <summary>
  85. /// 执行无返回值的sql语句
  86. /// </summary>
  87. /// <param name="commandString"></param>
  88. /// <returns></returns>
  89. public bool ExecuteNonQuery(string commandString)
  90. {
  91. //打开连接失败,不执行查询
  92. if (!OpenConnection())
  93. return false;
  94. try
  95. {
  96. OdbcCommand cmdObj = CreateCommand();
  97. cmdObj.CommandText = commandString;
  98. cmdObj.ExecuteNonQuery();
  99. }
  100. catch (Exception ex)
  101. {
  102. CloseConnection();
  103. _message = ex.Message;
  104. Log.Debug(ex);
  105. Log.Debug("ex:" + commandString);
  106. return false;
  107. }
  108. CloseConnection();
  109. return true;
  110. }
  111. #endregion
  112. #region 执行返回值的sql
  113. /// <summary>
  114. /// 执行返回值的sql
  115. /// </summary>
  116. /// <param name="commandString"></param>
  117. /// <returns></returns>
  118. public object ExecuteResult(string commandString)
  119. {
  120. object reobj = null;
  121. //打开连接失败,不执行查询
  122. if (!OpenConnection()) return reobj;
  123. try
  124. {
  125. OdbcCommand cmdObj = CreateCommand();
  126. cmdObj.CommandText = commandString;
  127. reobj = cmdObj.ExecuteScalar();
  128. }
  129. catch (Exception ex)
  130. {
  131. _message = ex.Message;
  132. Log.Debug(ex);
  133. }
  134. finally
  135. {
  136. CloseConnection();
  137. }
  138. return reobj;
  139. }
  140. #endregion
  141. #region 执行sql命令组
  142. /// <summary>
  143. /// 执行sql命令组
  144. /// </summary>
  145. /// <param name="arrSql"></param>
  146. /// <returns></returns>
  147. public bool ExecuteSqls(ArrayList arrSql)
  148. {
  149. if (!OpenConnection()) return false;
  150. try
  151. {
  152. OdbcCommand cmdObj = CreateCommand();
  153. foreach (var sql in arrSql)
  154. {
  155. cmdObj.CommandText = sql.ToString();
  156. cmdObj.ExecuteNonQuery();
  157. }
  158. }
  159. catch (Exception ex)
  160. {
  161. _message = ex.Message;
  162. Log.Debug(ex);
  163. return false;
  164. }
  165. finally
  166. {
  167. CloseConnection();
  168. }
  169. return true;
  170. }
  171. #endregion
  172. #region 事务控制执行sql命令组
  173. /// <summary>
  174. /// 事务控制执行sql命令组
  175. /// </summary>
  176. /// <param name="arrSql"></param>
  177. /// <returns></returns>
  178. public bool ExecuteSqlByAffair(ArrayList arrSql)
  179. {
  180. if (!OpenConnection()) return false;
  181. OdbcTransaction transObj = _con_SQL.BeginTransaction();//开始事务操作
  182. try
  183. {
  184. OdbcCommand cmdObj = CreateCommand();
  185. cmdObj.Transaction = transObj;//指定command的事务对象
  186. foreach (var sql in arrSql)
  187. {
  188. cmdObj.CommandText = sql.ToString();
  189. cmdObj.ExecuteNonQuery();
  190. }
  191. transObj.Commit();
  192. }
  193. catch (Exception ex)
  194. {
  195. transObj.Rollback();
  196. _message = ex.Message;
  197. Log.Debug(ex);
  198. foreach (var sql in arrSql)
  199. {
  200. Log.Debug("ex:" + sql);
  201. }
  202. return false;
  203. }
  204. finally
  205. {
  206. CloseConnection();
  207. }
  208. return true;
  209. }
  210. /// <summary>
  211. /// 事务控制执行sql命令组
  212. /// </summary>
  213. /// <param name="dicSql"></param>
  214. /// <returns></returns>
  215. public bool ExecuteSqlsByAffair(Dictionary<string, string> dicSql)
  216. {
  217. if (!OpenConnection())
  218. return false;
  219. OdbcTransaction transObj = _con_SQL.BeginTransaction();
  220. string sqlPath = string.Empty;
  221. try
  222. {
  223. OdbcCommand cmdObj = CreateCommand();
  224. cmdObj.Transaction = transObj;
  225. foreach (var item in dicSql)
  226. {
  227. sqlPath = item.Key;
  228. string[] commands = System.Text.RegularExpressions.Regex.Split(item.Value + " ",
  229. "[ |\r\n]go[ |\r\n]", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  230. foreach (string sql in commands)
  231. if (sql.Trim().Length > 0)
  232. {
  233. cmdObj.CommandText = sql;
  234. cmdObj.ExecuteNonQuery();
  235. }
  236. }
  237. transObj.Commit();
  238. }
  239. catch (Exception ex)
  240. {
  241. transObj.Rollback();
  242. _message = string.Format("执行 {0} 出错;\r\n", sqlPath);
  243. _message += ex.Message;
  244. Log.Debug(_message);
  245. return false;
  246. }
  247. finally
  248. {
  249. CloseConnection();
  250. }
  251. return true;
  252. }
  253. /// <summary>
  254. /// 事务控制执行sql命令组
  255. /// </summary>
  256. /// <param name="dicSql">sql命令组</param>
  257. /// <param name="dicRecord">返回的日志</param>
  258. /// <returns></returns>
  259. public bool ExecuteSqlsByAffair(Dictionary<string, string> dicSql, ref Dictionary<string, string> dicRecord)
  260. {
  261. if (!OpenConnection()) return false;
  262. OdbcTransaction transObj = _con_SQL.BeginTransaction();
  263. string sqlPath = string.Empty;
  264. try
  265. {
  266. OdbcCommand cmdObj = CreateCommand();
  267. cmdObj.Transaction = transObj;
  268. foreach (var item in dicSql)
  269. {
  270. sqlPath = item.Key;
  271. string[] commands = System.Text.RegularExpressions.Regex.Split(item.Value + " ",
  272. "[ |\r\n]go[ |\r\n]", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
  273. foreach (string sql in commands)
  274. if (sql.Trim().Length > 0)
  275. {
  276. cmdObj.CommandText = sql;
  277. cmdObj.ExecuteNonQuery();
  278. }
  279. if (dicRecord != null)
  280. dicRecord.Add(sqlPath, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo));
  281. }
  282. transObj.Commit();
  283. }
  284. catch (Exception ex)
  285. {
  286. _message = string.Format("执行{0}出错:\r\n", sqlPath);
  287. _message += ex.Message;
  288. Log.Debug(_message);
  289. try { transObj.Rollback(); }
  290. catch { }
  291. return false;
  292. }
  293. return true;
  294. }
  295. #endregion
  296. #region 获取数据表
  297. /// <summary>
  298. /// 获取数据表
  299. /// </summary>
  300. /// <param name="sql"></param>
  301. /// <returns></returns>
  302. public DataTable GetDataTable(string sql)
  303. {
  304. Log.Debug(sql);
  305. if (!OpenConnection()) return null;
  306. try
  307. {
  308. DataTable dt = new DataTable();
  309. OdbcCommand cmdObj = CreateCommand();
  310. cmdObj.CommandText = sql;
  311. OdbcDataAdapter daObj = new OdbcDataAdapter(cmdObj);
  312. daObj.Fill(dt);
  313. return dt;
  314. }
  315. catch (Exception ex)
  316. {
  317. _message = ex.Message;
  318. Log.Debug(ex);
  319. Log.Debug("ex:" + sql);
  320. return null;
  321. }
  322. finally
  323. {
  324. CloseConnection();
  325. }
  326. }
  327. /// <summary>
  328. /// 获取数据表
  329. /// </summary>
  330. /// <param name="sql"></param>
  331. /// <param name="tableName"></param>
  332. /// <returns></returns>
  333. public DataTable GetDataTable(string sql, string tableName)
  334. {
  335. if (!OpenConnection()) return null;
  336. try
  337. {
  338. DataTable dt = new DataTable();
  339. OdbcCommand cmdObj = CreateCommand();
  340. cmdObj.CommandText = sql;
  341. OdbcDataAdapter daObj = new OdbcDataAdapter(cmdObj);
  342. daObj.Fill(dt);
  343. dt.TableName = tableName;
  344. return dt;
  345. }
  346. catch (Exception ex)
  347. {
  348. _message = ex.Message;
  349. Log.Debug(ex);
  350. return null;
  351. }
  352. finally
  353. {
  354. CloseConnection();
  355. }
  356. }
  357. public DataTable GetDataTable(string sql, string tableName, int currentPage, int pageSize)
  358. {
  359. if (!OpenConnection()) return null;
  360. try
  361. {
  362. DataSet ds = new DataSet();
  363. OdbcCommand cmdObj = CreateCommand();
  364. cmdObj.CommandText = sql;
  365. OdbcDataAdapter daObj = new OdbcDataAdapter(cmdObj);
  366. daObj.Fill(ds, (currentPage - 1) * pageSize, pageSize, tableName);
  367. return ds.Tables[0];
  368. }
  369. catch (Exception ex)
  370. {
  371. _message = ex.Message;
  372. Log.Debug(ex);
  373. return null;
  374. }
  375. finally
  376. {
  377. CloseConnection();
  378. }
  379. }
  380. #endregion
  381. #region 获取数据集
  382. /// <summary>
  383. /// 获取数据集
  384. /// </summary>
  385. /// <param name="sql"></param>
  386. /// <returns></returns>
  387. public DataSet GetDataSet(string sql)
  388. {
  389. if (!OpenConnection()) return null;
  390. try
  391. {
  392. DataSet ds = new DataSet();
  393. OdbcCommand cmdObj = CreateCommand();
  394. cmdObj.CommandText = sql;
  395. OdbcDataAdapter daObj = new OdbcDataAdapter(cmdObj);
  396. daObj.Fill(ds);
  397. return ds;
  398. }
  399. catch (Exception ex)
  400. {
  401. _message = ex.Message;
  402. Log.Debug(ex);
  403. return null;
  404. }
  405. finally
  406. {
  407. CloseConnection();
  408. }
  409. }
  410. #endregion
  411. }
  412. }