CNAS取数仪器端升级
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

504 lines
17KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using CnasSynchronousCommon;
  7. using Npgsql;
  8. using NpgsqlTypes;
  9. namespace CnasSynchronusDAL
  10. {
  11. public static class PostgreSQLHelper
  12. {
  13. private static String mConnStr = null;
  14. public static void InitConnectionString(string strServerIP,string strServerPort,string strServerHost,string strServerUser,string strServerPwd)
  15. {
  16. mConnStr = $"Server={strServerIP};Port={strServerPort};Database={strServerHost};User Id={strServerUser};Password={strServerPwd};";
  17. }
  18. public static void InitConnectionString(string strConnectiong)
  19. {
  20. mConnStr = strConnectiong;
  21. }
  22. /// <summary>
  23. /// 对SQLite数据库执行增删改操作,返回受影响的行数。
  24. /// </summary>
  25. /// <param name="sql">要执行的增删改的SQL语句</param>
  26. /// <returns></returns>
  27. public static int ExecuteNonQuery(String sql)
  28. {
  29. NpgsqlConnection connection = new NpgsqlConnection(mConnStr);
  30. try
  31. {
  32. using (connection)
  33. {
  34. connection.Open();
  35. NpgsqlTransaction transaction = connection.BeginTransaction();
  36. using (NpgsqlCommand cmd = new NpgsqlCommand())
  37. {
  38. try
  39. {
  40. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
  41. int rows = cmd.ExecuteNonQuery();
  42. transaction.Commit();
  43. cmd.Parameters.Clear();
  44. return rows;
  45. }
  46. catch (NpgsqlException e1)
  47. {
  48. try
  49. {
  50. transaction.Rollback();
  51. }
  52. catch (Exception e2)
  53. {
  54. AppLog.Error(e2.Message);
  55. throw;
  56. }
  57. AppLog.Error(e1.Message);
  58. throw;
  59. }
  60. }
  61. }
  62. }
  63. catch (Exception e)
  64. {
  65. AppLog.Error(e.Message);
  66. throw;
  67. }
  68. }
  69. /// <summary>
  70. /// 对数据库执行增删改操作,返回受影响的行数。
  71. /// </summary>
  72. /// <param name="sql">要执行的增删改的SQL语句</param>
  73. /// <returns></returns>
  74. public static int ExecuteNonQuery(String sql, NpgsqlParameter[] cmdParams)
  75. {
  76. try
  77. {
  78. using (NpgsqlConnection connection = new NpgsqlConnection(mConnStr))
  79. {
  80. connection.Open();
  81. NpgsqlTransaction transaction = connection.BeginTransaction();
  82. using (NpgsqlCommand cmd = new NpgsqlCommand())
  83. {
  84. try
  85. {
  86. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
  87. int rows = cmd.ExecuteNonQuery();
  88. transaction.Commit();
  89. cmd.Parameters.Clear();
  90. return rows;
  91. }
  92. catch (NpgsqlException e1)
  93. {
  94. try
  95. {
  96. transaction.Rollback();
  97. }
  98. catch (Exception e2)
  99. {
  100. AppLog.Error(e2.Message);
  101. throw;
  102. }
  103. AppLog.Error(e1.Message);
  104. throw;
  105. }
  106. }
  107. }
  108. }
  109. catch (Exception e)
  110. {
  111. AppLog.Error(e.Message);
  112. throw;
  113. }
  114. }
  115. /// <summary>
  116. /// 对SQLite数据库执行操作,返回 返回第一行第一列数据
  117. /// </summary>
  118. /// <param name="sql"></param>
  119. /// <returns></returns>
  120. public static int ExecuteScalar(String sql)
  121. {
  122. try
  123. {
  124. using (NpgsqlConnection connection = new NpgsqlConnection(mConnStr))
  125. {
  126. connection.Open();
  127. NpgsqlTransaction transaction = connection.BeginTransaction();
  128. using (NpgsqlCommand cmd = new NpgsqlCommand())
  129. {
  130. try
  131. {
  132. int line = 0;
  133. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
  134. String str = cmd.ExecuteScalar().ToString();
  135. transaction.Commit();
  136. line = Convert.ToInt32(str);
  137. cmd.Parameters.Clear();
  138. return line;
  139. }
  140. catch (NpgsqlException e1)
  141. {
  142. try
  143. {
  144. transaction.Rollback();
  145. }
  146. catch (Exception e2)
  147. {
  148. AppLog.Error(e2.Message);
  149. throw;
  150. }
  151. AppLog.Error(e1.Message);
  152. throw;
  153. }
  154. }
  155. }
  156. }
  157. catch (Exception e)
  158. {
  159. AppLog.Error(e.Message);
  160. throw;
  161. }
  162. }
  163. /// <summary>
  164. /// 对SQLite数据库执行操作,返回 返回第一行第一列数据
  165. /// </summary>
  166. /// <param name="sql"></param>
  167. /// <returns></returns>
  168. public static int ExecuteScalar(String sql, NpgsqlParameter[] cmdParams)
  169. {
  170. try
  171. {
  172. using (NpgsqlConnection connection = new NpgsqlConnection(mConnStr))
  173. {
  174. connection.Open();
  175. NpgsqlTransaction transaction = connection.BeginTransaction();
  176. using (NpgsqlCommand cmd = new NpgsqlCommand())
  177. {
  178. try
  179. {
  180. int line = 0;
  181. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
  182. String str = cmd.ExecuteScalar().ToString();
  183. transaction.Commit();
  184. line = Convert.ToInt32(str);
  185. cmd.Parameters.Clear();
  186. return line;
  187. }
  188. catch (NpgsqlException e1)
  189. {
  190. try
  191. {
  192. transaction.Rollback();
  193. }
  194. catch (Exception e2)
  195. {
  196. AppLog.Error(e2.Message);
  197. throw;
  198. }
  199. AppLog.Error(e1.Message);
  200. throw;
  201. }
  202. }
  203. }
  204. }
  205. catch (Exception e)
  206. {
  207. AppLog.Error(e.Message);
  208. throw;
  209. }
  210. }
  211. /// <summary>
  212. /// 用执行的数据库连接执行一个返回数据集的sql命令
  213. /// </summary>
  214. /// <param name="sql"></param>
  215. /// <returns></returns>
  216. public static NpgsqlDataReader ExecuteReader(String sql)
  217. {
  218. try
  219. {
  220. //创建一个NpgsqlConnection对象
  221. using (NpgsqlConnection connection = new NpgsqlConnection(mConnStr))
  222. {
  223. connection.Open();
  224. NpgsqlTransaction transaction = connection.BeginTransaction();
  225. //创建一个NpgsqlCommand对象
  226. using (NpgsqlCommand cmd = new NpgsqlCommand())
  227. {
  228. try
  229. {
  230. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
  231. NpgsqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  232. transaction.Commit();
  233. cmd.Parameters.Clear();
  234. return reader;
  235. }
  236. catch (NpgsqlException e1)
  237. {
  238. try
  239. {
  240. transaction.Rollback();
  241. }
  242. catch (Exception e2)
  243. {
  244. AppLog.Error(e2.Message);
  245. throw;
  246. }
  247. AppLog.Error(e1.Message);
  248. throw;
  249. }
  250. }
  251. }
  252. }
  253. catch (Exception e)
  254. {
  255. AppLog.Error(e.Message);
  256. throw;
  257. }
  258. }
  259. /// <summary>
  260. /// 查询返回Dtaset
  261. /// </summary>
  262. /// <param name="sql"></param>
  263. /// <returns></returns>
  264. public static DataSet ExecuteDataSet(String sql)
  265. {
  266. NpgsqlConnection connection = new NpgsqlConnection(mConnStr);
  267. try
  268. {
  269. //创建一个NpgsqlConnection对象
  270. using (connection)
  271. {
  272. connection.Open();
  273. NpgsqlTransaction transaction = connection.BeginTransaction();
  274. //创建一个NpgsqlCommand对象
  275. using (NpgsqlCommand cmd = new NpgsqlCommand())
  276. {
  277. try
  278. {
  279. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
  280. NpgsqlDataAdapter adapter = new NpgsqlDataAdapter();
  281. adapter.SelectCommand = cmd;
  282. DataSet ds = new DataSet();
  283. adapter.Fill(ds);
  284. transaction.Commit();
  285. //清除参数
  286. cmd.Parameters.Clear();
  287. return ds;
  288. }
  289. catch (NpgsqlException e1)
  290. {
  291. try
  292. {
  293. transaction.Rollback();
  294. }
  295. catch (Exception e2)
  296. {
  297. AppLog.Error(e2.Message);
  298. throw;
  299. }
  300. AppLog.Error(e1.Message);
  301. throw;
  302. }
  303. }
  304. }
  305. }
  306. catch (Exception e)
  307. {
  308. AppLog.Error(e.Message);
  309. throw;
  310. }finally
  311. {
  312. if (connection != null)
  313. {
  314. //关闭数据库连接
  315. connection.Close();
  316. }
  317. }
  318. }
  319. /// <summary>
  320. /// 执行sql 返回一个DataTable
  321. /// </summary>
  322. /// <param name="sqlText"></param>
  323. /// <param name="parameters"></param>
  324. /// <returns></returns>
  325. public static DataTable ExecuteDataTable(string sqlText, params NpgsqlParameter[] parameters)
  326. {
  327. DataTable dt = null;
  328. try
  329. {
  330. using (NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(sqlText, mConnStr))
  331. {
  332. dt = new DataTable();
  333. adapter.SelectCommand.Parameters.AddRange(parameters);
  334. adapter.Fill(dt);
  335. return dt;
  336. }
  337. }
  338. catch (Exception ex)
  339. {
  340. AppLog.Error(ex.Message);
  341. }
  342. return null;
  343. }
  344. /// <summary>
  345. /// 查询返回Dtaset
  346. /// </summary>
  347. /// <param name="sql"></param>
  348. /// <returns></returns>
  349. public static DataSet ExecuteDataSet(String sql, NpgsqlParameter[] cmdParams)
  350. {
  351. NpgsqlConnection connection = new NpgsqlConnection(mConnStr);
  352. try
  353. {
  354. //创建一个NpgsqlConnection对象
  355. using (connection)
  356. {
  357. connection.Open();
  358. NpgsqlTransaction transaction = connection.BeginTransaction();
  359. //创建一个NpgsqlCommand对象
  360. using (NpgsqlCommand cmd = new NpgsqlCommand())
  361. {
  362. try
  363. {
  364. PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
  365. NpgsqlDataAdapter adapter = new NpgsqlDataAdapter();
  366. adapter.SelectCommand = cmd;
  367. DataSet ds = new DataSet();
  368. adapter.Fill(ds);
  369. transaction.Commit();
  370. //清除参数
  371. cmd.Parameters.Clear();
  372. return ds;
  373. }
  374. catch (NpgsqlException e1)
  375. {
  376. try
  377. {
  378. transaction.Rollback();
  379. }
  380. catch (Exception e2)
  381. {
  382. AppLog.Error(e2.Message);
  383. throw;
  384. }
  385. AppLog.Error(e1.Message);
  386. throw;
  387. }
  388. }
  389. }
  390. }
  391. catch (Exception e)
  392. {
  393. AppLog.Error(e.Message);
  394. throw;
  395. }finally
  396. {
  397. if (connection != null)
  398. {
  399. //关闭数据库连接
  400. connection.Close();
  401. }
  402. }
  403. }
  404. /// <summary>
  405. /// 准备执行一个命令
  406. /// </summary>
  407. /// <param name="cmd">sql命令</param>
  408. /// <param name="conn">OleDb连接</param>
  409. /// <param name="trans">OleDb事务</param>
  410. /// <param name="cmdType">命令类型例如 存储过程或者文本</param>
  411. /// <param name="cmdText">命令文本,例如:Select * from Products</param>
  412. /// <param name="cmdParms">执行命令的参数</param>
  413. private static void PrepareCommand(NpgsqlCommand cmd, NpgsqlConnection conn, NpgsqlTransaction trans, CommandType cmdType, string cmdText, NpgsqlParameter[] cmdParms)
  414. {
  415. if (conn.State != ConnectionState.Open)
  416. conn.Open();
  417. cmd.Connection = conn;
  418. cmd.CommandText = cmdText;
  419. if (trans != null)
  420. cmd.Transaction = trans;
  421. cmd.CommandType = cmdType;
  422. if (cmdParms != null)
  423. {
  424. foreach (NpgsqlParameter parm in cmdParms)
  425. cmd.Parameters.Add(parm);
  426. }
  427. }
  428. public static bool TestConnectPostgreSQL()
  429. {
  430. bool bIfSuccess = false;
  431. try
  432. {
  433. using (NpgsqlConnection connection = new NpgsqlConnection(mConnStr))
  434. {
  435. connection.Open();
  436. if (connection.State == System.Data.ConnectionState.Open)
  437. bIfSuccess = true;
  438. }
  439. }
  440. catch (Exception ex)
  441. {
  442. AppLog.Error(ex.Message);
  443. bIfSuccess = false;
  444. }
  445. return bIfSuccess;
  446. }
  447. }
  448. }