C#MysqlHelper

  1. View Code   

  2.   

  3. MysqlHelper类   

  4. using System;   

  5. using System.Collections;   

  6. using System.Collections.Specialized;   

  7. using System.Data;   

  8. using MySql.Data.MySqlClient;   

  9. using System.Configuration;   

  10. using System.Data.Common;   

  11. using System.Collections.Generic;   

  12. using System.Text.RegularExpressions;   

  13. namespace LOAF.DAL   

  14. {   

  15. public class MysqlHelper   

  16. {   

  17. //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.   

  18. // public static string connectionString = ConfigurationManager.ConnectionStrings["ConnDB"].ConnectionString;   

  19. public static string connectionString = ConfigurationManager.AppSettings["MySQL"];   

  20. //public string m = ConfigurationManager.AppSettings["MySQL"];   

  21. public MysqlHelper() { }   

  22. #region ExecuteNonQuery   

  23. //执行SQL语句,返回影响的记录数   

  24. /// <summary>   

  25. /// 执行SQL语句,返回影响的记录数   

  26. /// </summary>   

  27. /// <param name="SQLString">SQL语句</param>   

  28. /// <returns>影响的记录数</returns>   

  29. public static int ExecuteNonQuery(string SQLString)   

  30. {   

  31. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  32. {   

  33. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))   

  34. {   

  35. try   

  36. {   

  37. connection.Open();   

  38. int rows = cmd.ExecuteNonQuery();   

  39. return rows;   

  40. }   

  41. catch (MySql.Data.MySqlClient.MySqlException e)   

  42. {   

  43. connection.Close();   

  44. throw e;   

  45. }   

  46. }   

  47. }   

  48. }   

  49. /// <summary>   

  50. /// 执行SQL语句,返回影响的记录数   

  51. /// </summary>   

  52. /// <param name="SQLString">SQL语句</param>   

  53. /// <returns>影响的记录数</returns>   

  54. public static int ExecuteNonQuery(string SQLString, params MySqlParameter[] cmdParms)   

  55. {   

  56. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  57. {   

  58. using (MySqlCommand cmd = new MySqlCommand())   

  59. {   

  60. try   

  61. {   

  62. PrepareCommand(cmd, connection, null, SQLString, cmdParms);   

  63. int rows = cmd.ExecuteNonQuery();   

  64. cmd.Parameters.Clear();   

  65. return rows;   

  66. }   

  67. catch (MySql.Data.MySqlClient.MySqlException e)   

  68. {   

  69. throw e;   

  70. }   

  71. }   

  72. }   

  73. }   

  74. //执行多条SQL语句,实现数据库事务。   

  75. /// <summary>   

  76. /// 执行多条SQL语句,实现数据库事务。   

  77. /// </summary>   

  78. /// <param name="SQLStringList">多条SQL语句</param>   

  79. public static bool ExecuteNoQueryTran(List<String> SQLStringList)   

  80. {   

  81. using (MySqlConnection conn = new MySqlConnection(connectionString))   

  82. {   

  83. conn.Open();   

  84. MySqlCommand cmd = new MySqlCommand();   

  85. cmd.Connection = conn;   

  86. MySqlTransaction tx = conn.BeginTransaction();   

  87. cmd.Transaction = tx;   

  88. try   

  89. {   

  90. for (int n = 0; n < SQLStringList.Count; n++)   

  91. {   

  92. string strsql = SQLStringList[n];   

  93. if (strsql.Trim().Length > 1)   

  94. {   

  95. cmd.CommandText = strsql;   

  96. PrepareCommand(cmd, conn, tx, strsql, null);   

  97. cmd.ExecuteNonQuery();   

  98. }   

  99. }   

  100. cmd.ExecuteNonQuery();   

  101. tx.Commit();   

  102. return true;   

  103. }   

  104. catch   

  105. {   

  106. tx.Rollback();   

  107. return false;   

  108. }   

  109. }   

  110. }   

  111. #endregion   

  112. #region ExecuteScalar   

  113. /// <summary>   

  114. /// 执行一条计算查询结果语句,返回查询结果(object)。   

  115. /// </summary>   

  116. /// <param name="SQLString">计算查询结果语句</param>   

  117. /// <returns>查询结果(object)</returns>   

  118. public static object ExecuteScalar(string SQLString)   

  119. {   

  120. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  121. {   

  122. using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))   

  123. {   

  124. try   

  125. {   

  126. connection.Open();   

  127. object obj = cmd.ExecuteScalar();   

  128. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))   

  129. {   

  130. return null;   

  131. }   

  132. else   

  133. {   

  134. return obj;   

  135. }   

  136. }   

  137. catch (MySql.Data.MySqlClient.MySqlException e)   

  138. {   

  139. connection.Close();   

  140. throw e;   

  141. }   

  142. }   

  143. }   

  144. }   

  145. /// <summary>   

  146. /// 执行一条计算查询结果语句,返回查询结果(object)。   

  147. /// </summary>   

  148. /// <param name="SQLString">计算查询结果语句</param>   

  149. /// <returns>查询结果(object)</returns>   

  150. public static object ExecuteScalar(string SQLString, params MySqlParameter[] cmdParms)   

  151. {   

  152. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  153. {   

  154. using (MySqlCommand cmd = new MySqlCommand())   

  155. {   

  156. try   

  157. {   

  158. PrepareCommand(cmd, connection, null, SQLString, cmdParms);   

  159. object obj = cmd.ExecuteScalar();   

  160. cmd.Parameters.Clear();   

  161. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))   

  162. {   

  163. return null;   

  164. }   

  165. else   

  166. {   

  167. return obj;   

  168. }   

  169. }   

  170. catch (MySql.Data.MySqlClient.MySqlException e)   

  171. {   

  172. throw e;   

  173. }   

  174. }   

  175. }   

  176. }   

  177. #endregion   

  178. #region ExecuteReader   

  179. /// <summary>   

  180. /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )   

  181. /// </summary>   

  182. /// <param name="strSQL">查询语句</param>   

  183. /// <returns>MySqlDataReader</returns>   

  184. public static MySqlDataReader ExecuteReader(string strSQL)   

  185. {   

  186. MySqlConnection connection = new MySqlConnection(connectionString);   

  187. MySqlCommand cmd = new MySqlCommand(strSQL, connection);   

  188. try   

  189. {   

  190. connection.Open();   

  191. MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);   

  192. return myReader;   

  193. }   

  194. catch (MySql.Data.MySqlClient.MySqlException e)   

  195. {   

  196. throw e;   

  197. }   

  198. }   

  199. /// <summary>   

  200. /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close )   

  201. /// </summary>   

  202. /// <param name="strSQL">查询语句</param>   

  203. /// <returns>MySqlDataReader</returns>   

  204. public static MySqlDataReader ExecuteReader(string SQLString, params MySqlParameter[] cmdParms)   

  205. {   

  206. MySqlConnection connection = new MySqlConnection(connectionString);   

  207. MySqlCommand cmd = new MySqlCommand();   

  208. try   

  209. {   

  210. PrepareCommand(cmd, connection, null, SQLString, cmdParms);   

  211. MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);   

  212. cmd.Parameters.Clear();   

  213. return myReader;   

  214. }   

  215. catch (MySql.Data.MySqlClient.MySqlException e)   

  216. {   

  217. throw e;   

  218. }   

  219. // finally   

  220. // {   

  221. // cmd.Dispose();   

  222. // connection.Close();   

  223. // }   

  224. }   

  225. #endregion   

  226. #region ExecuteDataTable   

  227. /// <summary>   

  228. /// 执行查询语句,返回DataTable   

  229. /// </summary>   

  230. /// <param name="SQLString">查询语句</param>   

  231. /// <returns>DataTable</returns>   

  232. public static DataTable ExecuteDataTable(string SQLString)   

  233. {   

  234. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  235. {   

  236. DataSet ds = new DataSet();   

  237. try   

  238. {   

  239. connection.Open();   

  240. MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);   

  241. command.Fill(ds, "ds");   

  242. }   

  243. catch (MySql.Data.MySqlClient.MySqlException ex)   

  244. {   

  245. throw new Exception(ex.Message);   

  246. }   

  247. return ds.Tables[0];   

  248. }   

  249. }   

  250. /// <summary>   

  251. /// 执行查询语句,返回DataSet   

  252. /// </summary>   

  253. /// <param name="SQLString">查询语句</param>   

  254. /// <returns>DataTable</returns>   

  255. public static DataTable ExecuteDataTable(string SQLString, params MySqlParameter[] cmdParms)   

  256. {   

  257. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  258. {   

  259. MySqlCommand cmd = new MySqlCommand();   

  260. PrepareCommand(cmd, connection, null, SQLString, cmdParms);   

  261. using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))   

  262. {   

  263. DataSet ds = new DataSet();   

  264. try   

  265. {   

  266. da.Fill(ds, "ds");   

  267. cmd.Parameters.Clear();   

  268. }   

  269. catch (MySql.Data.MySqlClient.MySqlException ex)   

  270. {   

  271. throw new Exception(ex.Message);   

  272. }   

  273. return ds.Tables[0];   

  274. }   

  275. }   

  276. }   

  277. //获取起始页码和结束页码   

  278. public static DataTable ExecuteDataTable(string cmdText, int startResord, int maxRecord)   

  279. {   

  280. using (MySqlConnection connection = new MySqlConnection(connectionString))   

  281. {   

  282. DataSet ds = new DataSet();   

  283. try   

  284. {   

  285. connection.Open();   

  286. MySqlDataAdapter command = new MySqlDataAdapter(cmdText, connection);   

  287. command.Fill(ds, startResord, maxRecord, "ds");   

  288. }   

  289. catch (MySql.Data.MySqlClient.MySqlException ex)   

  290. {   

  291. throw new Exception(ex.Message);   

  292. }   

  293. return ds.Tables[0];   

  294. }   

  295. }   

  296. #endregion   

  297. /// <summary>   

  298. /// 获取分页数据 在不用存储过程情况下   

  299. /// </summary>   

  300. /// <param name="recordCount">总记录条数</param>   

  301. /// <param name="selectList">选择的列逗号隔开,支持top num</param>   

  302. /// <param name="tableName">表名字</param>   

  303. /// <param name="whereStr">条件字符 必须前加 and</param>   

  304. /// <param name="orderExpression">排序 例如 ID</param>   

  305. /// <param name="pageIdex">当前索引页</param>   

  306. /// <param name="pageSize">每页记录数</param>   

  307. /// <returns></returns>   

  308. public static DataTable getPager(out int recordCount, string selectList, string tableName, string whereStr, string orderExpression, int pageIdex, int pageSize)   

  309. {   

  310. int rows = 0;   

  311. DataTable dt = new DataTable();   

  312. MatchCollection matchs = Regex.Matches(selectList, @"top\s+\d{1,}", RegexOptions.IgnoreCase);//含有top   

  313. string sqlStr = sqlStr = string.Format("select {0} from {1} where 1=1 {2}", selectList, tableName, whereStr);   

  314. if (!string.IsNullOrEmpty(orderExpression)) { sqlStr += string.Format(" Order by {0}", orderExpression); }   

  315. if (matchs.Count > 0) //含有top的时候   

  316. {   

  317. DataTable dtTemp = ExecuteDataTable(sqlStr);   

  318. rows = dtTemp.Rows.Count;   

  319. }   

  320. else //不含有top的时候   

  321. {   

  322. string sqlCount = string.Format("select count(*) from {0} where 1=1 {1} ", tableName, whereStr);   

  323. //获取行数   

  324. object obj = ExecuteScalar(sqlCount);   

  325. if (obj != null)   

  326. {   

  327. rows = Convert.ToInt32(obj);   

  328. }   

  329. }   

  330. dt = ExecuteDataTable(sqlStr, (pageIdex-1)*pageSize, pageSize);   

  331. recordCount = rows;   

  332. return dt;   

  333. }   

  334. #region 创建command   

  335. private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)   

  336. {   

  337. if (conn.State != ConnectionState.Open)   

  338. conn.Open();   

  339. cmd.Connection = conn;   

  340. cmd.CommandText = cmdText;   

  341. if (trans != null)   

  342. cmd.Transaction = trans;   

  343. cmd.CommandType = CommandType.Text;//cmdType;   

  344. if (cmdParms != null)   

  345. {   

  346. foreach (MySqlParameter parameter in cmdParms)   

  347. {   

  348. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&   

  349. (parameter.Value == null))   

  350. {   

  351. parameter.Value = DBNull.Value;   

  352. }   

  353. cmd.Parameters.Add(parameter);   

  354. }   

  355. }   

  356. }   

  357. #endregion   

  358. }   

  359. }  



需要注意的地方有如下几点 
1)在sqlserver中参数化sql语句是用“@”符号,在mysql里面需要是用?号,切记,切记. 
2 )还有就是sqlserver中删除表可以这样写delete news where ID=12,但是在mysql里面 是delete from news where ID=12,收了from报错 
3 )我在使用过程中遇到了中文乱码,网上大部分解决办法是把表的设置成utf-8字符集。以及 C:\Program Files\MySQL\MySQL Server 5.1路径下my.ini 打开找到两处 
default-character-set 都设置成=utf8。


你可能感兴趣的:(C#MysqlHelper)