.net / MySQLHelper

原文:https://blog.csdn.net/yenange/article/details/17911373


MySql确实轻盈小巧, 整个 MySql.Data.dll 才427KB, 比起 Oracle 一百多MB,dll也得加上4、5个来真算得上轻量级了!

此外, 其实每种 Helper 其实都是差不多的, 只是换了类名称。可以考虑写个一统天下的Helper , 只不过同时用到的情况比较少, 而且Oracle比较庞大, 如果用不着而挂着就比较累赘了。

1. MySQLHelper.cs 

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data;  
  6. using MySql.Data;   //先引用MySql.Data.dll  
  7. using MySql.Data.MySqlClient;  
  8.   
  9. namespace Util  
  10. {  
  11.     public static class MySQLHelper  
  12.     {  
  13.         #region [ Connection ]  
  14.         public static string connectionString = "Database=firstmysqldb;Data Source=localhost;Port=3306;User Id=root;Password=??;Charset=utf8;TreatTinyAsBoolean=false;";  
  15.         public static MySqlConnection GetConnection   
  16.         {  
  17.             get  
  18.             {  
  19.                 return new MySqlConnection(connectionString);  
  20.             }  
  21.         }  
  22.         #endregion  
  23.  
  24.         #region [ ExecuteNonQuery ]  
  25.         /// <summary>  
  26.         /// 普通SQL语句执行增删改  
  27.         /// </summary>  
  28.         /// <param name="cmdText">SQL语句</param>  
  29.         /// <param name="commandParameters">可变参数</param>  
  30.         /// <returns>受影响行数</returns>  
  31.         public static int ExecuteNonQuery(string cmdText, params MySqlParameter[] commandParameters)  
  32.         {  
  33.             return ExecuteNonQuery(cmdText, CommandType.Text, commandParameters);  
  34.         }  
  35.         /// <summary>  
  36.         /// 存储过程执行增删改  
  37.         /// </summary>  
  38.         /// <param name="cmdText">存储过程</param>  
  39.         /// <param name="commandParameters">可变参数</param>  
  40.         /// <returns>受影响行数</returns>  
  41.         public static int ExecuteNonQueryByProc(string cmdText, params MySqlParameter[] commandParameters)  
  42.         {  
  43.             return ExecuteNonQuery(cmdText, CommandType.StoredProcedure, commandParameters);  
  44.         }  
  45.         /// <summary>  
  46.         /// 执行增删改  
  47.         /// </summary>  
  48.         /// <param name="cmdText">命令字符串</param>  
  49.         /// <param name="cmdType">命令类型</param>  
  50.         /// <param name="commandParameters">可变参数</param>  
  51.         /// <returns>受影响行数</returns>  
  52.         public static int ExecuteNonQuery(string cmdText, CommandType cmdType, params MySqlParameter[] commandParameters)  
  53.         {  
  54.             int result = 0;  
  55.   
  56.             using (MySqlConnection conn = GetConnection)  
  57.             {  
  58.                 try  
  59.                 {  
  60.                     MySqlCommand command = new MySqlCommand();  
  61.                     PrepareCommand(command, conn, cmdType, cmdText, commandParameters);  
  62.                     result = command.ExecuteNonQuery();  
  63.                 }  
  64.                 catch (Exception ex)  
  65.                 {  
  66.                     throw new Exception(ex.Message);  
  67.                 }  
  68.                 finally   
  69.                 {  
  70.                     if(conn!=null && conn.State!= ConnectionState.Closed)  
  71.                         conn.Close();  
  72.                 }  
  73.             }  
  74.             return result;  
  75.         }  
  76.         #endregion  
  77.  
  78.         #region [ ExecuteReader ]  
  79.         /// <summary>  
  80.         /// SQL语句得到 MySqlDataReader 对象  
  81.         /// </summary>  
  82.         /// <param name="cmdText">命令字符串</param>  
  83.         /// <param name="commandParameters">可变参数</param>  
  84.         /// <returns>MySqlDataReader 对象</returns>  
  85.         public static MySqlDataReader ExecuteReader(string cmdText, params MySqlParameter[] commandParameters)  
  86.         {  
  87.             return ExecuteReader(cmdText, CommandType.Text, commandParameters);  
  88.         }  
  89.         /// <summary>  
  90.         /// 存储过程得到 MySqlDataReader 对象  
  91.         /// </summary>  
  92.         /// <param name="cmdText">命令字符串</param>  
  93.         /// <param name="commandParameters">可变参数</param>  
  94.         /// <returns>MySqlDataReader 对象</returns>  
  95.         public static MySqlDataReader ExecuteReaderByProc(string cmdText, params MySqlParameter[] commandParameters)  
  96.         {  
  97.             return ExecuteReader(cmdText, CommandType.StoredProcedure, commandParameters);  
  98.         }  
  99.         /// <summary>  
  100.         /// 得到 MySqlDataReader 对象  
  101.         /// </summary>  
  102.         /// <param name="cmdText">命令字符串</param>  
  103.         /// <param name="cmdType">命令类型</param>  
  104.         /// <param name="commandParameters">可变参数</param>  
  105.         /// <returns>MySqlDataReader 对象</returns>  
  106.         public static MySqlDataReader ExecuteReader(string cmdText, CommandType cmdType, params MySqlParameter[] commandParameters)  
  107.         {  
  108.             MySqlDataReader result = null;  
  109.   
  110.             using (MySqlConnection conn = GetConnection)  
  111.             {  
  112.                 try  
  113.                 {  
  114.                     MySqlCommand command = new MySqlCommand();  
  115.                     PrepareCommand(command, conn, cmdType, cmdText, commandParameters);  
  116.                     result = command.ExecuteReader(CommandBehavior.CloseConnection);  
  117.                 }  
  118.                 catch (Exception ex)  
  119.                 {  
  120.                     throw new Exception(ex.Message);  
  121.                 }  
  122.                 finally  
  123.                 {  
  124.                     if (conn != null && conn.State != ConnectionState.Closed)  
  125.                         conn.Close();  
  126.                 }  
  127.             }  
  128.   
  129.             return result;  
  130.         }  
  131.         #endregion  
  132.  
  133.         #region [ ExecuteDataSet ]  
  134.         /// <summary>  
  135.         /// 执行SQL语句, 返回DataSet  
  136.         /// </summary>  
  137.         /// <param name="cmdText">命令字符串</param>  
  138.         /// <param name="commandParameters">可变参数</param>  
  139.         /// <returns> DataSet </returns>  
  140.         public static DataSet ExecuteDataSet(string cmdText, params MySqlParameter[] commandParameters)  
  141.         {  
  142.             return ExecuteDataSet(cmdText, CommandType.Text, commandParameters);  
  143.         }  
  144.   
  145.         /// <summary>  
  146.         /// 执行存储过程, 返回DataSet  
  147.         /// </summary>  
  148.         /// <param name="cmdText">命令字符串</param>  
  149.         /// <param name="commandParameters">可变参数</param>  
  150.         /// <returns> DataSet </returns>  
  151.         public static DataSet ExecuteDataSetByProc(string cmdText, params MySqlParameter[] commandParameters)  
  152.         {  
  153.             return ExecuteDataSet(cmdText, CommandType.StoredProcedure, commandParameters);  
  154.         }  
  155.   
  156.         /// <summary>  
  157.         /// 返回DataSet  
  158.         /// </summary>  
  159.         /// <param name="cmdText">命令字符串</param>  
  160.         /// <param name="cmdType">命令类型</param>  
  161.         /// <param name="commandParameters">可变参数</param>  
  162.         /// <returns> DataSet </returns>  
  163.         public static DataSet ExecuteDataSet(string cmdText, CommandType cmdType, params MySqlParameter[] commandParameters)  
  164.         {  
  165.             DataSet result = null;  
  166.   
  167.             using (MySqlConnection conn = GetConnection)  
  168.             {  
  169.                 try  
  170.                 {  
  171.                     MySqlCommand command = new MySqlCommand();  
  172.                     PrepareCommand(command, conn, cmdType, cmdText, commandParameters);  
  173.                     MySqlDataAdapter adapter = new MySqlDataAdapter();  
  174.                     adapter.SelectCommand = command;  
  175.                     result = new DataSet();  
  176.                     adapter.Fill(result);  
  177.                 }  
  178.                 catch (Exception ex)  
  179.                 {  
  180.                     throw new Exception(ex.Message);  
  181.                 }  
  182.                 finally  
  183.                 {  
  184.                     if (conn != null && conn.State != ConnectionState.Closed)  
  185.                         conn.Close();  
  186.                 }  
  187.             }  
  188.   
  189.             return result;  
  190.         }  
  191.         #endregion  
  192.  
  193.         #region [ ExecuteDataTable ]  
  194.         /// <summary>  
  195.         /// 执行SQL语句, 返回DataTable  
  196.         /// </summary>  
  197.         /// <param name="cmdText">命令字符串</param>  
  198.         /// <param name="commandParameters">可变参数</param>  
  199.         /// <returns> DataTable </returns>  
  200.         public static DataTable ExecuteDataTable(string cmdText, params MySqlParameter[] commandParameters)  
  201.         {  
  202.             return ExecuteDataTable(cmdText, CommandType.Text, commandParameters);  
  203.         }  
  204.   
  205.         /// <summary>  
  206.         /// 执行存储过程, 返回DataTable  
  207.         /// </summary>  
  208.         /// <param name="cmdText">命令字符串</param>  
  209.         /// <param name="commandParameters">可变参数</param>  
  210.         /// <returns> DataTable </returns>  
  211.         public static DataTable ExecuteDataTableByProc(string cmdText, params MySqlParameter[] commandParameters)  
  212.         {  
  213.             return ExecuteDataTable(cmdText, CommandType.StoredProcedure, commandParameters);  
  214.         }  
  215.   
  216.         /// <summary>  
  217.         /// 返回DataTable  
  218.         /// </summary>  
  219.         /// <param name="cmdText">命令字符串</param>  
  220.         /// <param name="cmdType">命令类型</param>  
  221.         /// <param name="commandParameters">可变参数</param>  
  222.         /// <returns> DataTable </returns>  
  223.         public static DataTable ExecuteDataTable(string cmdText, CommandType cmdType, params MySqlParameter[] commandParameters)  
  224.         {  
  225.             DataTable dtResult = null;  
  226.             DataSet ds = ExecuteDataSet(cmdText, cmdType, commandParameters);  
  227.   
  228.             if (ds != null && ds.Tables.Count > 0)  
  229.             {  
  230.                 dtResult = ds.Tables[0];  
  231.             }  
  232.             return dtResult;  
  233.         }  
  234.         #endregion  
  235.  
  236.         #region [ ExecuteScalar ]  
  237.         /// <summary>  
  238.         /// 普通SQL语句执行ExecuteScalar  
  239.         /// </summary>  
  240.         /// <param name="cmdText">SQL语句</param>  
  241.         /// <param name="commandParameters">可变参数</param>  
  242.         /// <returns>受影响行数</returns>  
  243.         public static object ExecuteScalar(string cmdText, params MySqlParameter[] commandParameters)  
  244.         {  
  245.             return ExecuteScalar(cmdText, CommandType.Text, commandParameters);  
  246.         }  
  247.         /// <summary>  
  248.         /// 存储过程执行ExecuteScalar  
  249.         /// </summary>  
  250.         /// <param name="cmdText">存储过程</param>  
  251.         /// <param name="commandParameters">可变参数</param>  
  252.         /// <returns>受影响行数</returns>  
  253.         public static object ExecuteScalarByProc(string cmdText, params MySqlParameter[] commandParameters)  
  254.         {  
  255.             return ExecuteScalar(cmdText, CommandType.StoredProcedure, commandParameters);  
  256.         }  
  257.         /// <summary>  
  258.         /// 执行ExecuteScalar  
  259.         /// </summary>  
  260.         /// <param name="cmdText">命令字符串</param>  
  261.         /// <param name="cmdType">命令类型</param>  
  262.         /// <param name="commandParameters">可变参数</param>  
  263.         /// <returns>受影响行数</returns>  
  264.         public static object ExecuteScalar(string cmdText, CommandType cmdType, params MySqlParameter[] commandParameters)  
  265.         {  
  266.             object result = null;  
  267.   
  268.             using (MySqlConnection conn = GetConnection)  
  269.             {  
  270.                 try  
  271.                 {  
  272.                     MySqlCommand command = new MySqlCommand();  
  273.                     PrepareCommand(command, conn, cmdType, cmdText, commandParameters);  
  274.                     result = command.ExecuteScalar();  
  275.                 }  
  276.                 catch (Exception ex)  
  277.                 {  
  278.                     throw new Exception(ex.Message);  
  279.                 }  
  280.                 finally  
  281.                 {  
  282.                     if (conn != null && conn.State != ConnectionState.Closed)  
  283.                         conn.Close();  
  284.                 }  
  285.             }  
  286.             return result;  
  287.         }  
  288.         #endregion  
  289.  
  290.         #region [ PrepareCommand ]  
  291.         /// <summary>  
  292.         /// Command对象执行前预处理  
  293.         /// </summary>  
  294.         /// <param name="command"></param>  
  295.         /// <param name="connection"></param>  
  296.         /// <param name="trans"></param>  
  297.         /// <param name="cmdType"></param>  
  298.         /// <param name="cmdText"></param>  
  299.         /// <param name="commandParameters"></param>  
  300.         private static void PrepareCommand(MySqlCommand command, MySqlConnection connection, CommandType cmdType, string cmdText, MySqlParameter[] commandParameters)  
  301.         {  
  302.             try  
  303.             {  
  304.                 if (connection.State != ConnectionState.Open) connection.Open();  
  305.   
  306.                 command.Connection = connection;  
  307.                 command.CommandText = cmdText;  
  308.                 command.CommandType = cmdType;  
  309.                 //command.CommandTimeout = 3600;    //此处请自定义  
  310.   
  311.                 //if (trans != null) command.Transaction = trans;  
  312.   
  313.                 if (commandParameters != null)  
  314.                 {  
  315.                     foreach (MySqlParameter parm in commandParameters)  
  316.                         command.Parameters.Add(parm);  
  317.                 }  
  318.             }  
  319.             catch  
  320.             {  
  321.   
  322.             }  
  323.         }  
  324.         #endregion  
  325.     }  
  326. }  


测试代码:

[csharp]  view plain  copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using MySql.Data;  
  6. using MySql.Data.MySqlClient;  
  7. using Util;  
  8. using System.Data;  
  9.   
  10. namespace ConsoleApplication1  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             //TestConnection();  
  17.             //InsertTest();  
  18.             //ExecuteDataTableTest();  
  19.   
  20.             string sql = "select count(1) from user";  
  21.             int rowCount = Convert.ToInt32( MySQLHelper.ExecuteScalar(sql) );  
  22.             Console.WriteLine(rowCount);  
  23.   
  24.             Console.Read();  
  25.         }  
  26.   
  27.         private static void ExecuteDataTableTest()  
  28.         {  
  29.             string sql = "select * from user";  
  30.             DataTable dt = MySQLHelper.ExecuteDataTable(sql);  
  31.             foreach (DataRow dr in dt.Rows)  
  32.             {  
  33.                 foreach (DataColumn dc in dt.Columns)  
  34.                 {  
  35.                     Console.Write("{0}:{1}\t", dc.ColumnName, dr[dc.ColumnName].ToString());  
  36.                 }  
  37.                 Console.WriteLine();  
  38.             }  
  39.         }  
  40.   
  41.         private static void InsertTest()  
  42.         {  
  43.             string sql = "insert into user(Id,Name) values(?Id,?Name);";  
  44.             MySqlParameter[] spArr = new MySqlParameter[]{  
  45.                 new MySqlParameter("Id",2),  
  46.                 new MySqlParameter("Name","leaf")  
  47.             };  
  48.             int r = MySQLHelper.ExecuteNonQuery(sql, spArr);  
  49.             Console.WriteLine(r);  
  50.         }  
  51.   
  52.         private static void TestConnection()  
  53.         {  
  54.             //测试连接是否正常  
  55.             using (MySqlConnection conn = MySQLHelper.GetConnection)  
  56.             {  
  57.                 try  
  58.                 {  
  59.                     conn.Open();  
  60.                     Console.WriteLine("打开 My SQL 连接成功!");  
  61.                 }  
  62.                 catch (Exception ex)  
  63.                 {  
  64.                     Console.WriteLine("打开 MySQL 连接失败,错误原因:" + ex.Message);  
  65.                 }  
  66.                 finally  
  67.                 {  
  68.                     conn.Close();  
  69.                 }  
  70.             }  
  71.         }  
  72.     }  
  73. }  

猜你喜欢

转载自blog.csdn.net/yuhan61659/article/details/80606752
net