LeadDbHelperMySQL.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. using MySql.Data.MySqlClient;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace NX_DbClassLibrary
  10. {
  11. /// <summary>
  12. /// Copyright (C) sunyalong
  13. /// 数据访问抽象基础类(基于MySql)
  14. /// 允许修改、添加满足自己项目的需要。
  15. /// 添加、修改后请详细注释。违者会强制删除不予采用。
  16. /// </summary>
  17. public abstract class LeadDbHelperMySQL
  18. {
  19. public static string connectionString = LeadConfigureConnectionString.GetConnectionString("LeadMySql");
  20. public LeadDbHelperMySQL()
  21. {
  22. }
  23. #region 公用方法
  24. /// <summary>
  25. /// 得到最大值
  26. /// </summary>
  27. /// <param name="FieldName"></param>
  28. /// <param name="TableName"></param>
  29. /// <returns></returns>
  30. public static int GetMaxID(string FieldName, string TableName)
  31. {
  32. string strsql = "select max(" + FieldName + ")+1 from " + TableName;
  33. object obj = GetSingle(strsql);
  34. if (obj == null)
  35. {
  36. return 1;
  37. }
  38. else
  39. {
  40. return int.Parse(obj.ToString());
  41. }
  42. }
  43. /// <summary>
  44. /// 是否存在
  45. /// </summary>
  46. /// <param name="strSql"></param>
  47. /// <returns></returns>
  48. public static bool Exists(string strSql)
  49. {
  50. object obj = GetSingle(strSql);
  51. int cmdresult;
  52. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  53. {
  54. cmdresult = 0;
  55. }
  56. else
  57. {
  58. cmdresult = int.Parse(obj.ToString());
  59. }
  60. if (cmdresult == 0)
  61. {
  62. return false;
  63. }
  64. else
  65. {
  66. return true;
  67. }
  68. }
  69. /// <summary>
  70. /// 是否存在(基于MySqlParameter)
  71. /// </summary>
  72. /// <param name="strSql"></param>
  73. /// <param name="cmdParms"></param>
  74. /// <returns></returns>
  75. public static bool Exists(string strSql, params MySqlParameter[] cmdParms)
  76. {
  77. object obj = GetSingle(strSql, cmdParms);
  78. int cmdresult;
  79. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  80. {
  81. cmdresult = 0;
  82. }
  83. else
  84. {
  85. cmdresult = int.Parse(obj.ToString());
  86. }
  87. if (cmdresult == 0)
  88. {
  89. return false;
  90. }
  91. else
  92. {
  93. return true;
  94. }
  95. }
  96. #endregion
  97. #region 执行简单SQL语句
  98. /// <summary>
  99. /// 执行SQL语句,返回影响的记录数
  100. /// </summary>
  101. /// <param name="SQLString">SQL语句</param>
  102. /// <returns>影响的记录数</returns>
  103. public static int ExecuteSql(string SQLString)
  104. {
  105. using (MySqlConnection connection = new MySqlConnection(connectionString))
  106. {
  107. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  108. {
  109. try
  110. {
  111. connection.Open();
  112. int rows = cmd.ExecuteNonQuery();
  113. return rows;
  114. }
  115. catch (MySql.Data.MySqlClient.MySqlException e)
  116. {
  117. connection.Close();
  118. throw e;
  119. }
  120. }
  121. }
  122. }
  123. public static int ExecuteSqlByTime(string SQLString, int Times)
  124. {
  125. using (MySqlConnection connection = new MySqlConnection(connectionString))
  126. {
  127. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  128. {
  129. try
  130. {
  131. connection.Open();
  132. cmd.CommandTimeout = Times;
  133. int rows = cmd.ExecuteNonQuery();
  134. return rows;
  135. }
  136. catch (MySql.Data.MySqlClient.MySqlException e)
  137. {
  138. connection.Close();
  139. throw e;
  140. }
  141. }
  142. }
  143. }
  144. /// <summary>
  145. /// 执行多条SQL语句,实现数据库事务。
  146. /// </summary>
  147. /// <param name="SQLStringList">多条SQL语句</param>
  148. public static int ExecuteSqlTran(List<String> SQLStringList)
  149. {
  150. using (MySqlConnection conn = new MySqlConnection(connectionString))
  151. {
  152. conn.Open();
  153. MySqlCommand cmd = new MySqlCommand
  154. {
  155. Connection = conn
  156. };
  157. MySqlTransaction tx = conn.BeginTransaction();
  158. cmd.Transaction = tx;
  159. try
  160. {
  161. int count = 0;
  162. for (int n = 0; n < SQLStringList.Count; n++)
  163. {
  164. string strsql = SQLStringList[n];
  165. if (strsql.Trim().Length > 1)
  166. {
  167. cmd.CommandText = strsql;
  168. count += cmd.ExecuteNonQuery();
  169. }
  170. }
  171. tx.Commit();
  172. return count;
  173. }
  174. catch
  175. {
  176. tx.Rollback();
  177. return 0;
  178. }
  179. }
  180. }
  181. /// <summary>
  182. /// 执行带一个存储过程参数的的SQL语句。
  183. /// </summary>
  184. /// <param name="SQLString">SQL语句</param>
  185. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  186. /// <returns>影响的记录数</returns>
  187. public static int ExecuteSql(string SQLString, string content)
  188. {
  189. using (MySqlConnection connection = new MySqlConnection(connectionString))
  190. {
  191. MySqlCommand cmd = new MySqlCommand(SQLString, connection);
  192. MySqlParameter myParameter = new MySqlParameter("@content", SqlDbType.NText)
  193. {
  194. Value = content
  195. };
  196. cmd.Parameters.Add(myParameter);
  197. try
  198. {
  199. connection.Open();
  200. int rows = cmd.ExecuteNonQuery();
  201. return rows;
  202. }
  203. catch (MySql.Data.MySqlClient.MySqlException e)
  204. {
  205. throw e;
  206. }
  207. finally
  208. {
  209. cmd.Dispose();
  210. connection.Close();
  211. }
  212. }
  213. }
  214. /// <summary>
  215. /// 执行带一个存储过程参数的的SQL语句。
  216. /// </summary>
  217. /// <param name="SQLString">SQL语句</param>
  218. /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  219. /// <returns>影响的记录数</returns>
  220. public static object ExecuteSqlGet(string SQLString, string content)
  221. {
  222. using (MySqlConnection connection = new MySqlConnection(connectionString))
  223. {
  224. MySqlCommand cmd = new MySqlCommand(SQLString, connection);
  225. MySqlParameter myParameter = new MySqlParameter("@content", SqlDbType.NText)
  226. {
  227. Value = content
  228. };
  229. cmd.Parameters.Add(myParameter);
  230. try
  231. {
  232. connection.Open();
  233. object obj = cmd.ExecuteScalar();
  234. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  235. {
  236. return null;
  237. }
  238. else
  239. {
  240. return obj;
  241. }
  242. }
  243. catch (MySql.Data.MySqlClient.MySqlException e)
  244. {
  245. throw e;
  246. }
  247. finally
  248. {
  249. cmd.Dispose();
  250. connection.Close();
  251. }
  252. }
  253. }
  254. /// <summary>
  255. /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
  256. /// </summary>
  257. /// <param name="strSQL">SQL语句</param>
  258. /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
  259. /// <returns>影响的记录数</returns>
  260. public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
  261. {
  262. using (MySqlConnection connection = new MySqlConnection(connectionString))
  263. {
  264. MySqlCommand cmd = new MySqlCommand(strSQL, connection);
  265. MySqlParameter myParameter = new MySqlParameter("@fs", SqlDbType.Image)
  266. {
  267. Value = fs
  268. };
  269. cmd.Parameters.Add(myParameter);
  270. try
  271. {
  272. connection.Open();
  273. int rows = cmd.ExecuteNonQuery();
  274. return rows;
  275. }
  276. catch (MySql.Data.MySqlClient.MySqlException e)
  277. {
  278. throw e;
  279. }
  280. finally
  281. {
  282. cmd.Dispose();
  283. connection.Close();
  284. }
  285. }
  286. }
  287. /// <summary>
  288. /// 执行一条计算查询结果语句,返回查询结果(object)。
  289. /// </summary>
  290. /// <param name="SQLString">计算查询结果语句</param>
  291. /// <returns>查询结果(object)</returns>
  292. public static object GetSingle(string SQLString)
  293. {
  294. using (MySqlConnection connection = new MySqlConnection(connectionString))
  295. {
  296. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  297. {
  298. try
  299. {
  300. connection.Open();
  301. object obj = cmd.ExecuteScalar();
  302. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  303. {
  304. return null;
  305. }
  306. else
  307. {
  308. return obj;
  309. }
  310. }
  311. catch (MySql.Data.MySqlClient.MySqlException e)
  312. {
  313. connection.Close();
  314. throw e;
  315. }
  316. }
  317. }
  318. }
  319. public static object GetSingle(string SQLString, int Times)
  320. {
  321. using (MySqlConnection connection = new MySqlConnection(connectionString))
  322. {
  323. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
  324. {
  325. try
  326. {
  327. connection.Open();
  328. cmd.CommandTimeout = Times;
  329. object obj = cmd.ExecuteScalar();
  330. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  331. {
  332. return null;
  333. }
  334. else
  335. {
  336. return obj;
  337. }
  338. }
  339. catch (MySql.Data.MySqlClient.MySqlException e)
  340. {
  341. connection.Close();
  342. throw e;
  343. }
  344. }
  345. }
  346. }
  347. /// <summary>
  348. /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )
  349. /// </summary>
  350. /// <param name="strSQL">查询语句</param>
  351. /// <returns>MySqlDataReader</returns>
  352. public static MySqlDataReader ExecuteReader(string strSQL)
  353. {
  354. MySqlConnection connection = new MySqlConnection(connectionString);
  355. MySqlCommand cmd = new MySqlCommand(strSQL, connection);
  356. try
  357. {
  358. connection.Open();
  359. MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  360. return myReader;
  361. }
  362. catch (MySql.Data.MySqlClient.MySqlException e)
  363. {
  364. throw e;
  365. }
  366. }
  367. /// <summary>
  368. /// 执行查询语句,返回DataSet
  369. /// </summary>
  370. /// <param name="SQLString">查询语句</param>
  371. /// <returns>DataSet</returns>
  372. public static DataSet Query(string SQLString)
  373. {
  374. using (MySqlConnection connection = new MySqlConnection(connectionString))
  375. {
  376. DataSet ds = new DataSet();
  377. try
  378. {
  379. connection.Open();
  380. MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
  381. command.Fill(ds, "ds");
  382. }
  383. catch (MySql.Data.MySqlClient.MySqlException ex)
  384. {
  385. throw new Exception(ex.Message);
  386. }
  387. return ds;
  388. }
  389. }
  390. public static DataSet Query(string SQLString, int Times)
  391. {
  392. using (MySqlConnection connection = new MySqlConnection(connectionString))
  393. {
  394. DataSet ds = new DataSet();
  395. try
  396. {
  397. connection.Open();
  398. MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
  399. command.SelectCommand.CommandTimeout = Times;
  400. command.Fill(ds, "ds");
  401. }
  402. catch (MySql.Data.MySqlClient.MySqlException ex)
  403. {
  404. throw new Exception(ex.Message);
  405. }
  406. return ds;
  407. }
  408. }
  409. #endregion
  410. #region 执行带参数的SQL语句
  411. /// <summary>
  412. /// 执行SQL语句,返回影响的记录数
  413. /// </summary>
  414. /// <param name="SQLString">SQL语句</param>
  415. /// <returns>影响的记录数</returns>
  416. public static int ExecuteSql(string SQLString, params MySqlParameter[] cmdParms)
  417. {
  418. using (MySqlConnection connection = new MySqlConnection(connectionString))
  419. {
  420. using (MySqlCommand cmd = new MySqlCommand())
  421. {
  422. try
  423. {
  424. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  425. int rows = cmd.ExecuteNonQuery();
  426. cmd.Parameters.Clear();
  427. return rows;
  428. }
  429. catch (MySql.Data.MySqlClient.MySqlException e)
  430. {
  431. throw e;
  432. }
  433. }
  434. }
  435. }
  436. /// <summary>
  437. /// 执行多条SQL语句,实现数据库事务。
  438. /// </summary>
  439. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
  440. public static void ExecuteSqlTran(Hashtable SQLStringList)
  441. {
  442. using (MySqlConnection conn = new MySqlConnection(connectionString))
  443. {
  444. conn.Open();
  445. using (MySqlTransaction trans = conn.BeginTransaction())
  446. {
  447. MySqlCommand cmd = new MySqlCommand();
  448. try
  449. {
  450. //循环
  451. foreach (DictionaryEntry myDE in SQLStringList)
  452. {
  453. string cmdText = myDE.Key.ToString();
  454. MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value;
  455. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  456. int val = cmd.ExecuteNonQuery();
  457. cmd.Parameters.Clear();
  458. }
  459. trans.Commit();
  460. }
  461. catch
  462. {
  463. trans.Rollback();
  464. throw;
  465. }
  466. }
  467. }
  468. }
  469. /// <summary>
  470. /// 执行多条SQL语句,实现数据库事务。
  471. /// </summary>
  472. /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param>
  473. public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
  474. {
  475. using (MySqlConnection conn = new MySqlConnection(connectionString))
  476. {
  477. conn.Open();
  478. using (MySqlTransaction trans = conn.BeginTransaction())
  479. {
  480. MySqlCommand cmd = new MySqlCommand();
  481. try
  482. {
  483. int indentity = 0;
  484. //循环
  485. foreach (DictionaryEntry myDE in SQLStringList)
  486. {
  487. string cmdText = myDE.Key.ToString();
  488. MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value;
  489. foreach (MySqlParameter q in cmdParms)
  490. {
  491. if (q.Direction == ParameterDirection.InputOutput)
  492. {
  493. q.Value = indentity;
  494. }
  495. }
  496. PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  497. int val = cmd.ExecuteNonQuery();
  498. foreach (MySqlParameter q in cmdParms)
  499. {
  500. if (q.Direction == ParameterDirection.Output)
  501. {
  502. indentity = Convert.ToInt32(q.Value);
  503. }
  504. }
  505. cmd.Parameters.Clear();
  506. }
  507. trans.Commit();
  508. }
  509. catch
  510. {
  511. trans.Rollback();
  512. throw;
  513. }
  514. }
  515. }
  516. }
  517. /// <summary>
  518. /// 执行一条计算查询结果语句,返回查询结果(object)。
  519. /// </summary>
  520. /// <param name="SQLString">计算查询结果语句</param>
  521. /// <returns>查询结果(object)</returns>
  522. public static object GetSingle(string SQLString, params MySqlParameter[] cmdParms)
  523. {
  524. using (MySqlConnection connection = new MySqlConnection(connectionString))
  525. {
  526. using (MySqlCommand cmd = new MySqlCommand())
  527. {
  528. try
  529. {
  530. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  531. object obj = cmd.ExecuteScalar();
  532. cmd.Parameters.Clear();
  533. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  534. {
  535. return null;
  536. }
  537. else
  538. {
  539. return obj;
  540. }
  541. }
  542. catch (MySql.Data.MySqlClient.MySqlException e)
  543. {
  544. throw e;
  545. }
  546. }
  547. }
  548. }
  549. /// <summary>
  550. /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )
  551. /// </summary>
  552. /// <param name="strSQL">查询语句</param>
  553. /// <returns>MySqlDataReader</returns>
  554. public static MySqlDataReader ExecuteReader(string SQLString, params MySqlParameter[] cmdParms)
  555. {
  556. MySqlConnection connection = new MySqlConnection(connectionString);
  557. MySqlCommand cmd = new MySqlCommand();
  558. try
  559. {
  560. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  561. MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  562. cmd.Parameters.Clear();
  563. return myReader;
  564. }
  565. catch (MySql.Data.MySqlClient.MySqlException e)
  566. {
  567. throw e;
  568. }
  569. }
  570. /// <summary>
  571. /// 执行查询语句,返回DataSet
  572. /// </summary>
  573. /// <param name="SQLString">查询语句</param>
  574. /// <returns>DataSet</returns>
  575. public static DataSet Query(string SQLString, params MySqlParameter[] cmdParms)
  576. {
  577. using (MySqlConnection connection = new MySqlConnection(connectionString))
  578. {
  579. MySqlCommand cmd = new MySqlCommand();
  580. PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  581. using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
  582. {
  583. DataSet ds = new DataSet();
  584. try
  585. {
  586. da.Fill(ds, "ds");
  587. cmd.Parameters.Clear();
  588. }
  589. catch (MySql.Data.MySqlClient.MySqlException ex)
  590. {
  591. throw new Exception(ex.Message);
  592. }
  593. return ds;
  594. }
  595. }
  596. }
  597. private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
  598. {
  599. if (conn.State != ConnectionState.Open)
  600. conn.Open();
  601. cmd.Connection = conn;
  602. cmd.CommandText = cmdText;
  603. if (trans != null)
  604. cmd.Transaction = trans;
  605. cmd.CommandType = CommandType.Text;//cmdType;
  606. if (cmdParms != null)
  607. {
  608. foreach (MySqlParameter parameter in cmdParms)
  609. {
  610. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  611. (parameter.Value == null))
  612. {
  613. parameter.Value = DBNull.Value;
  614. }
  615. cmd.Parameters.Add(parameter);
  616. }
  617. }
  618. }
  619. #endregion
  620. }
  621. }