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.

466 lines
16KB

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