DbHelperMySQL.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Specialized;
  4. using System.Data;
  5. using MySql.Data.MySqlClient;
  6. using System.Configuration;
  7. using System.Data.Common;
  8. using System.Collections.Generic;
  9. namespace Maticsoft.DBUtility
  10. {
  11. /// <summary>
  12. /// 数据访问抽象基础类
  13. /// Copyright (C) Maticsoft
  14. /// </summary>
  15. public abstract class DbHelperMySQL
  16. {
  17. //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
  18. public static string connectionString = PubConstant.ConnectionString;
  19. public DbHelperMySQL()
  20. {
  21. }
  22. #region 公用方法
  23. /// <summary>
  24. /// 得到最大值
  25. /// </summary>
  26. /// <param name="FieldName"></param>
  27. /// <param name="TableName"></param>
  28. /// <returns></returns>
  29. public static int GetMaxID(string FieldName, string TableName)
  30. {
  31. string strsql = "select max(" + FieldName + ")+1 from " + TableName;
  32. object obj = GetSingle(strsql);
  33. if (obj == null)
  34. {
  35. return 1;
  36. }
  37. else
  38. {
  39. return int.Parse(obj.ToString());
  40. }
  41. }
  42. /// <summary>
  43. /// 是否存在
  44. /// </summary>
  45. /// <param name="strSql"></param>
  46. /// <returns></returns>
  47. public static bool Exists(string strSql)
  48. {
  49. object obj = GetSingle(strSql);
  50. int cmdresult;
  51. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  52. {
  53. cmdresult = 0;
  54. }
  55. else
  56. {
  57. cmdresult = int.Parse(obj.ToString());
  58. }
  59. if (cmdresult == 0)
  60. {
  61. return false;
  62. }
  63. else
  64. {
  65. return true;
  66. }
  67. }
  68. /// <summary>
  69. /// 是否存在(基于MySqlParameter)
  70. /// </summary>
  71. /// <param name="strSql"></param>
  72. /// <param name="cmdParms"></param>
  73. /// <returns></returns>
  74. public static bool Exists(string strSql, params MySqlParameter[] cmdParms)
  75. {
  76. object obj = GetSingle(strSql, cmdParms);
  77. int cmdresult;
  78. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  79. {
  80. cmdresult = 0;
  81. }
  82. else
  83. {
  84. cmdresult = int.Parse(obj.ToString());
  85. }
  86. if (cmdresult == 0)
  87. {
  88. return false;
  89. }
  90. else
  91. {
  92. return true;
  93. }
  94. }
  95. #endregion
  96. #region 执行简单SQL语句
  97. /// <summary>
  98. /// 执行SQL语句,返回影响的记录数
  99. /// </summary>
  100. /// <param name="SQLString">SQL语句</param>
  101. /// <returns>影响的记录数</returns>
  102. public static int ExecuteSql(string SQLString)
  103. {
  104. using (MySqlConnection connection = new MySqlConnection(connectionString))
  105. {
  106. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  107. {
  108. try
  109. {
  110. connection.Open();
  111. int rows = cmd.ExecuteNonQuery();
  112. return rows;
  113. }
  114. catch (MySql.Data.MySqlClient.MySqlException e)
  115. {
  116. connection.Close();
  117. throw e;
  118. }
  119. }
  120. }
  121. }
  122. public static int ExecuteSqlByTime(string SQLString, int Times)
  123. {
  124. using (MySqlConnection connection = new MySqlConnection(connectionString))
  125. {
  126. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  127. {
  128. try
  129. {
  130. connection.Open();
  131. cmd.CommandTimeout = Times;
  132. int rows = cmd.ExecuteNonQuery();
  133. return rows;
  134. }
  135. catch (MySql.Data.MySqlClient.MySqlException e)
  136. {
  137. connection.Close();
  138. throw e;
  139. }
  140. }
  141. }
  142. }
  143. /// <summary>
  144. /// 执行MySql和Oracle滴混合事务
  145. /// </summary>
  146. /// <param name="list">SQL命令行列表</param>
  147. /// <param name="oracleCmdSqlList">Oracle命令行列表</param>
  148. /// <returns>执行结果 0-由于SQL造成事务失败 -1 由于Oracle造成事务失败 1-整体事务执行成功</returns>
  149. //public static int ExecuteSqlTran(List<CommandInfo> list, List<CommandInfo> oracleCmdSqlList)
  150. //{
  151. // using (MySqlConnection conn = new MySqlConnection(connectionString))
  152. // {
  153. // conn.Open();
  154. // MySqlCommand cmd = new MySqlCommand();
  155. // cmd.Connection = conn;
  156. // MySqlTransaction tx = conn.BeginTransaction();
  157. // cmd.Transaction = tx;
  158. // try
  159. // {
  160. // foreach (CommandInfo myDE in list)
  161. // {
  162. // string cmdText = myDE.CommandText;
  163. // MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Parameters;
  164. // PrepareCommand(cmd, conn, tx, cmdText, cmdParms);
  165. // if (myDE.EffentNextType == EffentNextType.SolicitationEvent)
  166. // {
  167. // if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  168. // {
  169. // tx.Rollback();
  170. // throw new Exception("违背要求"+myDE.CommandText+"必须符合select count(..的格式");
  171. // //return 0;
  172. // }
  173. // object obj = cmd.ExecuteScalar();
  174. // bool isHave = false;
  175. // if (obj == null && obj == DBNull.Value)
  176. // {
  177. // isHave = false;
  178. // }
  179. // isHave = Convert.ToInt32(obj) > 0;
  180. // if (isHave)
  181. // {
  182. // //引发事件
  183. // myDE.OnSolicitationEvent();
  184. // }
  185. // }
  186. // if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  187. // {
  188. // if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  189. // {
  190. // tx.Rollback();
  191. // throw new Exception("SQL:违背要求" + myDE.CommandText + "必须符合select count(..的格式");
  192. // //return 0;
  193. // }
  194. // object obj = cmd.ExecuteScalar();
  195. // bool isHave = false;
  196. // if (obj == null && obj == DBNull.Value)
  197. // {
  198. // isHave = false;
  199. // }
  200. // isHave = Convert.ToInt32(obj) > 0;
  201. // if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  202. // {
  203. // tx.Rollback();
  204. // throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须大于0");
  205. // //return 0;
  206. // }
  207. // if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  208. // {
  209. // tx.Rollback();
  210. // throw new Exception("SQL:违背要求" + myDE.CommandText + "返回值必须等于0");
  211. // //return 0;
  212. // }
  213. // continue;
  214. // }
  215. // int val = cmd.ExecuteNonQuery();
  216. // if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
  217. // {
  218. // tx.Rollback();
  219. // throw new Exception("SQL:违背要求" + myDE.CommandText + "必须有影响行");
  220. // //return 0;
  221. // }
  222. // cmd.Parameters.Clear();
  223. // }
  224. // string oraConnectionString = PubConstant.GetConnectionString("ConnectionStringPPC");
  225. // bool res = OracleHelper.ExecuteSqlTran(oraConnectionString, oracleCmdSqlList);
  226. // if (!res)
  227. // {
  228. // tx.Rollback();
  229. // throw new Exception("执行失败");
  230. // // return -1;
  231. // }
  232. // tx.Commit();
  233. // return 1;
  234. // }
  235. // catch (MySql.Data.MySqlClient.MySqlException e)
  236. // {
  237. // tx.Rollback();
  238. // throw e;
  239. // }
  240. // catch (Exception e)
  241. // {
  242. // tx.Rollback();
  243. // throw e;
  244. // }
  245. // }
  246. //}
  247. /// <summary>
  248. /// 执行多条SQL语句,实现数据库事务。
  249. /// </summary>
  250. /// <param name="SQLStringList">多条SQL语句</param>
  251. public static int ExecuteSqlTran(List<String> SQLStringList)
  252. {
  253. using (MySqlConnection conn = new MySqlConnection(connectionString))
  254. {
  255. conn.Open();
  256. MySqlCommand cmd = new MySqlCommand();
  257. cmd.Connection = conn;
  258. MySqlTransaction tx = conn.BeginTransaction();
  259. cmd.Transaction = tx;
  260. try
  261. {
  262. int count = 0;
  263. for (int n = 0; n < SQLStringList.Count; n++)
  264. {
  265. string strsql = SQLStringList[n];
  266. if (strsql.Trim().Length > 1)
  267. {
  268. cmd.CommandText = strsql;
  269. count += cmd.ExecuteNonQuery();
  270. }
  271. }
  272. tx.Commit();
  273. return count;
  274. }
  275. catch
  276. {
  277. tx.Rollback();
  278. return 0;
  279. }
  280. }
  281. }
  282. /// <summary>
  283. /// 执行带一个存储过程参数的的SQL语句。
  284. /// </summary>
  285. /// <param name="SQLString">SQL语句</param>
  286. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  287. /// <returns>影响的记录数</returns>
  288. public static int ExecuteSql(string SQLString, string content)
  289. {
  290. using (MySqlConnection connection = new MySqlConnection(connectionString))
  291. {
  292. MySqlCommand cmd = new MySqlCommand(SQLString, connection);
  293. MySql.Data.MySqlClient.MySqlParameter myParameter = new MySql.Data.MySqlClient.MySqlParameter("@content", SqlDbType.NText);
  294. myParameter.Value = content;
  295. cmd.Parameters.Add(myParameter);
  296. try
  297. {
  298. connection.Open();
  299. int rows = cmd.ExecuteNonQuery();
  300. return rows;
  301. }
  302. catch (MySql.Data.MySqlClient.MySqlException e)
  303. {
  304. throw e;
  305. }
  306. finally
  307. {
  308. cmd.Dispose();
  309. connection.Close();
  310. }
  311. }
  312. }
  313. /// <summary>
  314. /// 执行带一个存储过程参数的的SQL语句。
  315. /// </summary>
  316. /// <param name="SQLString">SQL语句</param>
  317. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  318. /// <returns>影响的记录数</returns>
  319. public static object ExecuteSqlGet(string SQLString, string content)
  320. {
  321. using (MySqlConnection connection = new MySqlConnection(connectionString))
  322. {
  323. MySqlCommand cmd = new MySqlCommand(SQLString, connection);
  324. MySql.Data.MySqlClient.MySqlParameter myParameter = new MySql.Data.MySqlClient.MySqlParameter("@content", SqlDbType.NText);
  325. myParameter.Value = content;
  326. cmd.Parameters.Add(myParameter);
  327. try
  328. {
  329. connection.Open();
  330. object obj = cmd.ExecuteScalar();
  331. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  332. {
  333. return null;
  334. }
  335. else
  336. {
  337. return obj;
  338. }
  339. }
  340. catch (MySql.Data.MySqlClient.MySqlException e)
  341. {
  342. throw e;
  343. }
  344. finally
  345. {
  346. cmd.Dispose();
  347. connection.Close();
  348. }
  349. }
  350. }
  351. /// <summary>
  352. /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
  353. /// </summary>
  354. /// <param name="strSQL">SQL语句</param>
  355. /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
  356. /// <returns>影响的记录数</returns>
  357. public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
  358. {
  359. using (MySqlConnection connection = new MySqlConnection(connectionString))
  360. {
  361. MySqlCommand cmd = new MySqlCommand(strSQL, connection);
  362. MySql.Data.MySqlClient.MySqlParameter myParameter = new MySql.Data.MySqlClient.MySqlParameter("@fs", SqlDbType.Image);
  363. myParameter.Value = fs;
  364. cmd.Parameters.Add(myParameter);
  365. try
  366. {
  367. connection.Open();
  368. int rows = cmd.ExecuteNonQuery();
  369. return rows;
  370. }
  371. catch (MySql.Data.MySqlClient.MySqlException e)
  372. {
  373. throw e;
  374. }
  375. finally
  376. {
  377. cmd.Dispose();
  378. connection.Close();
  379. }
  380. }
  381. }
  382. /// <summary>
  383. /// 执行一条计算查询结果语句,返回查询结果(object)。
  384. /// </summary>
  385. /// <param name="SQLString">计算查询结果语句</param>
  386. /// <returns>查询结果(object)</returns>
  387. public static object GetSingle(string SQLString)
  388. {
  389. using (MySqlConnection connection = new MySqlConnection(connectionString))
  390. {
  391. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  392. {
  393. try
  394. {
  395. connection.Open();
  396. object obj = cmd.ExecuteScalar();
  397. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  398. {
  399. return null;
  400. }
  401. else
  402. {
  403. return obj;
  404. }
  405. }
  406. catch (MySql.Data.MySqlClient.MySqlException e)
  407. {
  408. connection.Close();
  409. throw e;
  410. }
  411. }
  412. }
  413. }
  414. public static object GetSingle(string SQLString, int Times)
  415. {
  416. using (MySqlConnection connection = new MySqlConnection(connectionString))
  417. {
  418. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  419. {
  420. try
  421. {
  422. connection.Open();
  423. cmd.CommandTimeout = Times;
  424. object obj = cmd.ExecuteScalar();
  425. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  426. {
  427. return null;
  428. }
  429. else
  430. {
  431. return obj;
  432. }
  433. }
  434. catch (MySql.Data.MySqlClient.MySqlException e)
  435. {
  436. connection.Close();
  437. throw e;
  438. }
  439. }
  440. }
  441. }
  442. /// <summary>
  443. /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )
  444. /// </summary>
  445. /// <param name="strSQL">查询语句</param>
  446. /// <returns>MySqlDataReader</returns>
  447. public static MySqlDataReader ExecuteReader(string strSQL)
  448. {
  449. MySqlConnection connection = new MySqlConnection(connectionString);
  450. MySqlCommand cmd = new MySqlCommand(strSQL, connection);
  451. try
  452. {
  453. connection.Open();
  454. MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  455. return myReader;
  456. }
  457. catch (MySql.Data.MySqlClient.MySqlException e)
  458. {
  459. throw e;
  460. }
  461. }
  462. /// <summary>
  463. /// 执行查询语句,返回DataSet
  464. /// </summary>
  465. /// <param name="SQLString">查询语句</param>
  466. /// <returns>DataSet</returns>
  467. public static DataSet Query(string SQLString)
  468. {
  469. using (MySqlConnection connection = new MySqlConnection(connectionString))
  470. {
  471. DataSet ds = new DataSet();
  472. try
  473. {
  474. connection.Open();
  475. MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
  476. command.Fill(ds, "ds");
  477. }
  478. catch (MySql.Data.MySqlClient.MySqlException ex)
  479. {
  480. throw new Exception(ex.Message);
  481. }
  482. return ds;
  483. }
  484. }
  485. public static DataSet Query(string SQLString, int Times)
  486. {
  487. using (MySqlConnection connection = new MySqlConnection(connectionString))
  488. {
  489. DataSet ds = new DataSet();
  490. try
  491. {
  492. connection.Open();
  493. MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
  494. command.SelectCommand.CommandTimeout = Times;
  495. command.Fill(ds, "ds");
  496. }
  497. catch (MySql.Data.MySqlClient.MySqlException ex)
  498. {
  499. throw new Exception(ex.Message);
  500. }
  501. return ds;
  502. }
  503. }
  504. #endregion
  505. #region 执行带参数的SQL语句
  506. /// <summary>
  507. /// 执行SQL语句,返回影响的记录数
  508. /// </summary>
  509. /// <param name="SQLString">SQL语句</param>
  510. /// <returns>影响的记录数</returns>
  511. public static int ExecuteSql(string SQLString, params MySqlParameter[] cmdParms)
  512. {
  513. using (MySqlConnection connection = new MySqlConnection(connectionString))
  514. {
  515. using (MySqlCommand cmd = new MySqlCommand())
  516. {
  517. try
  518. {
  519. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  520. int rows = cmd.ExecuteNonQuery();
  521. cmd.Parameters.Clear();
  522. return rows;
  523. }
  524. catch (MySql.Data.MySqlClient.MySqlException e)
  525. {
  526. throw e;
  527. }
  528. }
  529. }
  530. }
  531. /// <summary>
  532. /// 执行多条SQL语句,实现数据库事务。
  533. /// </summary>
  534. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
  535. public static void ExecuteSqlTran(Hashtable SQLStringList)
  536. {
  537. using (MySqlConnection conn = new MySqlConnection(connectionString))
  538. {
  539. conn.Open();
  540. using (MySqlTransaction trans = conn.BeginTransaction())
  541. {
  542. MySqlCommand cmd = new MySqlCommand();
  543. try
  544. {
  545. //循环
  546. foreach (DictionaryEntry myDE in SQLStringList)
  547. {
  548. string cmdText = myDE.Key.ToString();
  549. MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value;
  550. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  551. int val = cmd.ExecuteNonQuery();
  552. cmd.Parameters.Clear();
  553. }
  554. trans.Commit();
  555. }
  556. catch
  557. {
  558. trans.Rollback();
  559. throw;
  560. }
  561. }
  562. }
  563. }
  564. /// <summary>
  565. /// 执行多条SQL语句,实现数据库事务。
  566. /// </summary>
  567. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
  568. public static int ExecuteSqlTran(System.Collections.Generic.List<CommandInfo> cmdList)
  569. {
  570. using (MySqlConnection conn = new MySqlConnection(connectionString))
  571. {
  572. conn.Open();
  573. using (MySqlTransaction trans = conn.BeginTransaction())
  574. {
  575. MySqlCommand cmd = new MySqlCommand();
  576. try
  577. { int count = 0;
  578. //循环
  579. foreach (CommandInfo myDE in cmdList)
  580. {
  581. string cmdText = myDE.CommandText;
  582. MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Parameters;
  583. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  584. if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
  585. {
  586. if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
  587. {
  588. trans.Rollback();
  589. return 0;
  590. }
  591. object obj = cmd.ExecuteScalar();
  592. bool isHave = false;
  593. if (obj == null && obj == DBNull.Value)
  594. {
  595. isHave = false;
  596. }
  597. isHave = Convert.ToInt32(obj) > 0;
  598. if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
  599. {
  600. trans.Rollback();
  601. return 0;
  602. }
  603. if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
  604. {
  605. trans.Rollback();
  606. return 0;
  607. }
  608. continue;
  609. }
  610. int val = cmd.ExecuteNonQuery();
  611. count += val;
  612. if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
  613. {
  614. trans.Rollback();
  615. return 0;
  616. }
  617. cmd.Parameters.Clear();
  618. }
  619. trans.Commit();
  620. return count;
  621. }
  622. catch
  623. {
  624. trans.Rollback();
  625. throw;
  626. }
  627. }
  628. }
  629. }
  630. /// <summary>
  631. /// 执行多条SQL语句,实现数据库事务。
  632. /// </summary>
  633. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
  634. public static void ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> SQLStringList)
  635. {
  636. using (MySqlConnection conn = new MySqlConnection(connectionString))
  637. {
  638. conn.Open();
  639. using (MySqlTransaction trans = conn.BeginTransaction())
  640. {
  641. MySqlCommand cmd = new MySqlCommand();
  642. try
  643. {
  644. int indentity = 0;
  645. //循环
  646. foreach (CommandInfo myDE in SQLStringList)
  647. {
  648. string cmdText = myDE.CommandText;
  649. MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Parameters;
  650. foreach (MySqlParameter q in cmdParms)
  651. {
  652. if (q.Direction == ParameterDirection.InputOutput)
  653. {
  654. q.Value = indentity;
  655. }
  656. }
  657. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  658. int val = cmd.ExecuteNonQuery();
  659. foreach (MySqlParameter q in cmdParms)
  660. {
  661. if (q.Direction == ParameterDirection.Output)
  662. {
  663. indentity = Convert.ToInt32(q.Value);
  664. }
  665. }
  666. cmd.Parameters.Clear();
  667. }
  668. trans.Commit();
  669. }
  670. catch
  671. {
  672. trans.Rollback();
  673. throw;
  674. }
  675. }
  676. }
  677. }
  678. /// <summary>
  679. /// 执行多条SQL语句,实现数据库事务。
  680. /// </summary>
  681. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
  682. public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
  683. {
  684. using (MySqlConnection conn = new MySqlConnection(connectionString))
  685. {
  686. conn.Open();
  687. using (MySqlTransaction trans = conn.BeginTransaction())
  688. {
  689. MySqlCommand cmd = new MySqlCommand();
  690. try
  691. {
  692. int indentity = 0;
  693. //循环
  694. foreach (DictionaryEntry myDE in SQLStringList)
  695. {
  696. string cmdText = myDE.Key.ToString();
  697. MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value;
  698. foreach (MySqlParameter q in cmdParms)
  699. {
  700. if (q.Direction == ParameterDirection.InputOutput)
  701. {
  702. q.Value = indentity;
  703. }
  704. }
  705. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  706. int val = cmd.ExecuteNonQuery();
  707. foreach (MySqlParameter q in cmdParms)
  708. {
  709. if (q.Direction == ParameterDirection.Output)
  710. {
  711. indentity = Convert.ToInt32(q.Value);
  712. }
  713. }
  714. cmd.Parameters.Clear();
  715. }
  716. trans.Commit();
  717. }
  718. catch
  719. {
  720. trans.Rollback();
  721. throw;
  722. }
  723. }
  724. }
  725. }
  726. /// <summary>
  727. /// 执行一条计算查询结果语句,返回查询结果(object)。
  728. /// </summary>
  729. /// <param name="SQLString">计算查询结果语句</param>
  730. /// <returns>查询结果(object)</returns>
  731. public static object GetSingle(string SQLString, params MySqlParameter[] cmdParms)
  732. {
  733. using (MySqlConnection connection = new MySqlConnection(connectionString))
  734. {
  735. using (MySqlCommand cmd = new MySqlCommand())
  736. {
  737. try
  738. {
  739. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  740. object obj = cmd.ExecuteScalar();
  741. cmd.Parameters.Clear();
  742. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  743. {
  744. return null;
  745. }
  746. else
  747. {
  748. return obj;
  749. }
  750. }
  751. catch (MySql.Data.MySqlClient.MySqlException e)
  752. {
  753. throw e;
  754. }
  755. }
  756. }
  757. }
  758. /// <summary>
  759. /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )
  760. /// </summary>
  761. /// <param name="strSQL">查询语句</param>
  762. /// <returns>MySqlDataReader</returns>
  763. public static MySqlDataReader ExecuteReader(string SQLString, params MySqlParameter[] cmdParms)
  764. {
  765. MySqlConnection connection = new MySqlConnection(connectionString);
  766. MySqlCommand cmd = new MySqlCommand();
  767. try
  768. {
  769. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  770. MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  771. cmd.Parameters.Clear();
  772. return myReader;
  773. }
  774. catch (MySql.Data.MySqlClient.MySqlException e)
  775. {
  776. throw e;
  777. }
  778. // finally
  779. // {
  780. // cmd.Dispose();
  781. // connection.Close();
  782. // }
  783. }
  784. /// <summary>
  785. /// 执行查询语句,返回DataSet
  786. /// </summary>
  787. /// <param name="SQLString">查询语句</param>
  788. /// <returns>DataSet</returns>
  789. public static DataSet Query(string SQLString, params MySqlParameter[] cmdParms)
  790. {
  791. using (MySqlConnection connection = new MySqlConnection(connectionString))
  792. {
  793. MySqlCommand cmd = new MySqlCommand();
  794. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  795. using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
  796. {
  797. DataSet ds = new DataSet();
  798. try
  799. {
  800. da.Fill(ds, "ds");
  801. cmd.Parameters.Clear();
  802. }
  803. catch (MySql.Data.MySqlClient.MySqlException ex)
  804. {
  805. throw new Exception(ex.Message);
  806. }
  807. return ds;
  808. }
  809. }
  810. }
  811. private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
  812. {
  813. if (conn.State != ConnectionState.Open)
  814. conn.Open();
  815. cmd.Connection = conn;
  816. cmd.CommandText = cmdText;
  817. if (trans != null)
  818. cmd.Transaction = trans;
  819. cmd.CommandType = CommandType.Text;//cmdType;
  820. if (cmdParms != null)
  821. {
  822. foreach (MySqlParameter parameter in cmdParms)
  823. {
  824. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  825. (parameter.Value == null))
  826. {
  827. parameter.Value = DBNull.Value;
  828. }
  829. cmd.Parameters.Add(parameter);
  830. }
  831. }
  832. }
  833. #endregion
  834. }
  835. }