C#用于Mysql操作的MySqlHelper类

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Text;  
    using System.Data;  
    using System.Collections;  
    using MySql.Data.Common;  
    using MySql.Data.MySqlClient;  
    using MySql.Data.Types;  
    using System.Configuration;  
    using System.IO;  
      
    namespace MSCL  
    {  
        /// <summary>    
        /// 先引用官网MySql.Data.dll文件  
        /// </summary>    
        public abstract class MYSQLHelper  
        {  
      
            /// <summary>  
            /// a valid database connectionstring  
            /// </summary>  
            public static string connectionStringManager = ConfigurationManager.AppSettings["MySqlConnStr"].ToString();  
      
            /// <summary>  
            /// a valid database connectionstring  
            /// </summary>  
            public static string ConnectionStringManager  
            {  
                get { return connectionStringManager; }  
            }  
      
      
            //hashtable to store the parameter information, the hash table can store any type of argument     
            //Here the hashtable is static types of static variables, since it is static, that is a definition of global use.    
            //All parameters are using this hash table, how to ensure that others in the change does not affect their time to read it    
            //Before ,the method can use the lock method to lock the table, does not allow others to modify.when it has readed then  unlocked table.    
            //Now .NET provides a HashTable's Synchronized methods to achieve the same function, no need to manually lock, completed directly by the system framework     
            private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());  
      
            /// <summary>    
            /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring     
            /// The parameter list using parameters that in array forms    
            /// </summary>    
            /// <remarks>    
            /// Usage example:     
            /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure,    
            /// "PublishOrders", new MySqlParameter("@prodid", 24));    
            /// </remarks>    
            /// <param name="connectionString">a valid database connectionstring</param>    
            /// <param name="cmdType">MySqlCommand command type (stored procedures, T-SQL statement, and so on.) </param>    
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>    
            /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>    
            /// <returns>Returns a value that means number of rows affected</returns>    
            public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                MySqlCommand cmd = new MySqlCommand();  
      
                using (MySqlConnection conn = new MySqlConnection(connectionString))  
                {  
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);  
                    int val = cmd.ExecuteNonQuery();  
                    cmd.Parameters.Clear();  
                    return val;  
                }  
            }  
      
            /// <summary>    
            /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring     
            /// The parameter list using parameters that in array forms    
            /// </summary>    
            /// <remarks>    
            /// Usage example:     
            /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure,    
            /// "PublishOrders", new MySqlParameter("@prodid", 24));    
            /// </remarks>    
            /// <param name="cmdType">MySqlCommand command type (stored procedures, T-SQL statement, and so on.) </param>    
            /// <param name="connectionString">a valid database connectionstring</param>    
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>    
            /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>    
            /// <returns>Returns true or false </returns>    
            public static bool ExecuteNonQuery(CommandType cmdType, string connectionString, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                MySqlCommand cmd = new MySqlCommand();  
      
                using (MySqlConnection conn = new MySqlConnection(connectionString))  
                {  
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);  
                    try  
                    {  
                        int val = cmd.ExecuteNonQuery();  
                        return true;  
                    }  
                    catch  
                    {  
                        return false;  
                    }  
                    finally  
                    {  
                        cmd.Parameters.Clear();  
                    }  
                }  
            }  
            /// <summary>    
            /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring     
            /// Array of form parameters using the parameter list     
            /// </summary>    
            /// <param name="conn">connection</param>    
            /// <param name="cmdType">MySqlCommand command type (stored procedures, T-SQL statement, and so on.)</param>    
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>    
            /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>    
            /// <returns>Returns a value that means number of rows affected</returns>    
            public static int ExecuteNonQuery(MySqlConnection conn, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                MySqlCommand cmd = new MySqlCommand();  
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);  
                int val = cmd.ExecuteNonQuery();  
                cmd.Parameters.Clear();  
                return val;  
            }  
      
            /// <summary>    
            /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring     
            /// Array of form parameters using the parameter list     
            /// </summary>    
            /// <param name="conn">sql Connection that has transaction</param>    
            /// <param name="cmdType">SqlCommand command type (stored procedures, T-SQL statement, and so on.)</param>    
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>    
            /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>    
            /// <returns>Returns a value that means number of rows affected </returns>    
            public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                MySqlCommand cmd = new MySqlCommand();  
                PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);  
                int val = cmd.ExecuteNonQuery();  
                cmd.Parameters.Clear();  
                return val;  
            }  
      
            /// <summary>    
            /// Call method of sqldatareader to read data    
            /// </summary>    
            /// <param name="connectionString">connectionstring</param>    
            /// <param name="cmdType">command type, such as using stored procedures: CommandType.StoredProcedure</param>    
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>    
            /// <param name="commandParameters">parameters</param>    
            /// <returns>SqlDataReader type of data collection</returns>    
            public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                MySqlCommand cmd = new MySqlCommand();  
                MySqlConnection conn = new MySqlConnection(connectionString);  
      
                // we use a try/catch here because if the method throws an exception we want to     
                // close the connection throw code, because no datareader will exist, hence the     
                // commandBehaviour.CloseConnection will not work    
                try  
                {  
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);  
                    MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);  
                    cmd.Parameters.Clear();  
                    return rdr;  
                }  
                catch  
                {  
                    conn.Close();  
                    throw;  
                }  
            }  
      
            /// <summary>    
            /// use the ExectueScalar to read a single result    
            /// </summary>    
            /// <param name="connectionString">connectionstring</param>    
            /// <param name="cmdType">command type, such as using stored procedures: CommandType.StoredProcedure</param>    
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>    
            /// <param name="commandParameters">parameters</param>    
            /// <returns>a value in object type</returns>    
            public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                MySqlCommand cmd = new MySqlCommand();  
      
                using (MySqlConnection connection = new MySqlConnection(connectionString))  
                {  
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);  
                    object val = cmd.ExecuteScalar();  
                    cmd.Parameters.Clear();  
                    return val;  
                }  
            }  
              
            /// <summary>  
            /// Call method of dataset to read data   
            /// </summary>  
            /// <param name="connectionString">connectionstring</param>  
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>  
            /// <param name="commandParameters">parameters</param>  
            /// <returns>DataSet</returns>  
            public static DataSet GetDataSet(string connectionString, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                DataSet retSet = new DataSet();  
                using (MySqlDataAdapter msda = new MySqlDataAdapter(cmdText, connectionString))  
                {  
                    msda.Fill(retSet);  
                }  
                return retSet;  
            }  
      
            /// <summary>  
            /// Call method of datatable to read data   
            /// </summary>  
            /// <param name="connectionString">connectionstring</param>  
            /// <param name="cmdText">stored procedure name or T-SQL statement</param>  
            /// <param name="commandParameters">parameters</param>  
            /// <returns>DataTable</returns>  
            public static DataTable GetDataTable(string connectionString, string cmdText, params MySqlParameter[] commandParameters)  
            {  
                DataSet retSet = new DataSet();  
                using (MySqlDataAdapter msda = new MySqlDataAdapter(cmdText, connectionString))  
                {  
                    msda.Fill(retSet);  
                }  
                return retSet.Tables[0];  
            }  
      
            /// <summary>    
            /// cache the parameters in the HashTable    
            /// </summary>    
            /// <param name="cacheKey">hashtable key name</param>    
            /// <param name="commandParameters">the parameters that need to cached</param>    
            public static void CacheParameters(string cacheKey, params MySqlParameter[] commandParameters)  
            {  
                parmCache[cacheKey] = commandParameters;  
            }  
      
            /// <summary>    
            /// get parameters in hashtable by cacheKey    
            /// </summary>    
            /// <param name="cacheKey">hashtable key name</param>    
            /// <returns>the parameters</returns>    
            public static MySqlParameter[] GetCachedParameters(string cacheKey)  
            {  
                MySqlParameter[] cachedParms = (MySqlParameter[])parmCache[cacheKey];  
      
                if (cachedParms == null)  
                    return null;  
      
                MySqlParameter[] clonedParms = new MySqlParameter[cachedParms.Length];  
      
                for (int i = 0, j = cachedParms.Length; i < j; i++)  
                    clonedParms[i] = (MySqlParameter)((ICloneable)cachedParms[i]).Clone();  
      
                return clonedParms;  
            }  
      
            /// <summary>    
            ///Prepare parameters for the implementation of the command    
            /// </summary>    
            /// <param name="cmd">mySqlCommand command</param>    
            /// <param name="conn">database connection that is existing</param>    
            /// <param name="trans">database transaction processing </param>    
            /// <param name="cmdType">SqlCommand command type (stored procedures, T-SQL statement, and so on.) </param>    
            /// <param name="cmdText">Command text, T-SQL statements such as Select * from Products</param>    
            /// <param name="cmdParms">return the command that has parameters</param>    
            private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)  
            {  
                if (conn.State != ConnectionState.Open)  
                    conn.Open();  
      
                cmd.Connection = conn;  
                cmd.CommandText = cmdText;  
      
                if (trans != null)  
                    cmd.Transaction = trans;  
      
                cmd.CommandType = cmdType;  
      
                if (cmdParms != null)  
                    foreach (MySqlParameter parm in cmdParms)  
                        cmd.Parameters.Add(parm);  
            }  
            #region parameters  
            /// <summary>    
            /// Set parameters    
            /// </summary>    
            /// <param name="ParamName">parameter name</param>    
            /// <param name="DbType">data type</param>    
            /// <param name="Size">type size</param>    
            /// <param name="Direction">input or output</param>    
            /// <param name="Value">set the value</param>    
            /// <returns>Return parameters that has been assigned</returns>    
            public static MySqlParameter CreateParam(string ParamName, MySqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)  
            {  
                MySqlParameter param;  
      
      
                if (Size > 0)  
                {  
                    param = new MySqlParameter(ParamName, DbType, Size);  
                }  
                else  
                {  
      
                    param = new MySqlParameter(ParamName, DbType);  
                }  
      
      
                param.Direction = Direction;  
                if (!(Direction == ParameterDirection.Output && Value == null))  
                {  
                    param.Value = Value;  
                }  
      
      
                return param;  
            }  
      
            /// <summary>    
            /// set Input parameters    
            /// </summary>    
            /// <param name="ParamName">parameter names, such as:@ id </param>    
            /// <param name="DbType">parameter types, such as: MySqlDbType.Int</param>    
            /// <param name="Size">size parameters, such as: the length of character type for the 100</param>    
            /// <param name="Value">parameter value to be assigned</param>    
            /// <returns>Parameters</returns>    
            public static MySqlParameter CreateInParam(string ParamName, MySqlDbType DbType, int Size, object Value)  
            {  
                return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);  
            }  
      
            /// <summary>    
            /// Output parameters     
            /// </summary>    
            /// <param name="ParamName">parameter names, such as:@ id</param>    
            /// <param name="DbType">parameter types, such as: MySqlDbType.Int</param>    
            /// <param name="Size">size parameters, such as: the length of character type for the 100</param>    
            /// <param name="Value">parameter value to be assigned</param>    
            /// <returns>Parameters</returns>    
            public static MySqlParameter CreateOutParam(string ParamName, MySqlDbType DbType, int Size)  
            {  
                return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);  
            }  
      
            /// <summary>    
            /// Set return parameter value     
            /// </summary>    
            /// <param name="ParamName">parameter names, such as:@ id</param>    
            /// <param name="DbType">parameter types, such as: MySqlDbType.Int</param>    
            /// <param name="Size">size parameters, such as: the length of character type for the 100</param>    
            /// <param name="Value">parameter value to be assigned<</param>    
            /// <returns>Parameters</returns>    
            public static MySqlParameter CreateReturnParam(string ParamName, MySqlDbType DbType, int Size)  
            {  
                return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);  
            }  
      
            /// <summary>    
            /// Generate paging storedProcedure parameters    
            /// </summary>    
            /// <param name="CurrentIndex">CurrentPageIndex</param>    
            /// <param name="PageSize">pageSize</param>    
            /// <param name="WhereSql">query Condition</param>    
            /// <param name="TableName">tableName</param>    
            /// <param name="Columns">columns to query</param>    
            /// <param name="Sort">sort</param>    
            /// <returns>MySqlParameter collection</returns>    
            public static MySqlParameter[] GetPageParm(int CurrentIndex, int PageSize, string WhereSql, string TableName, string Columns, Hashtable Sort)  
            {  
                MySqlParameter[] parm = {     
                                       MYSQLHelper.CreateInParam("@CurrentIndex",  MySqlDbType.Int32,      4,      CurrentIndex    ),    
                                       MYSQLHelper.CreateInParam("@PageSize",      MySqlDbType.Int32,      4,      PageSize        ),    
                                       MYSQLHelper.CreateInParam("@WhereSql",      MySqlDbType.VarChar,  2500,    WhereSql        ),    
                                       MYSQLHelper.CreateInParam("@TableName",     MySqlDbType.VarChar,  20,     TableName       ),    
                                       MYSQLHelper.CreateInParam("@Column",        MySqlDbType.VarChar,  2500,    Columns         ),    
                                       MYSQLHelper.CreateInParam("@Sort",          MySqlDbType.VarChar,  50,     GetSort(Sort)   ),    
                                       MYSQLHelper.CreateOutParam("@RecordCount",  MySqlDbType.Int32,      4                       )    
                                       };  
                return parm;  
            }  
            /// <summary>    
            /// Statistics data that in table    
            /// </summary>    
            /// <param name="TableName">table name</param>    
            /// <param name="Columns">Statistics column</param>    
            /// <param name="WhereSql">conditions</param>    
            /// <returns>Set of parameters</returns>    
            public static MySqlParameter[] GetCountParm(string TableName, string Columns, string WhereSql)  
            {  
                MySqlParameter[] parm = {     
                                       MYSQLHelper.CreateInParam("@TableName",     MySqlDbType.VarChar,  20,     TableName       ),    
                                       MYSQLHelper.CreateInParam("@CountColumn",  MySqlDbType.VarChar,  20,     Columns         ),    
                                       MYSQLHelper.CreateInParam("@WhereSql",      MySqlDbType.VarChar,  250,    WhereSql        ),    
                                       MYSQLHelper.CreateOutParam("@RecordCount",  MySqlDbType.Int32,      4                       )    
                                       };  
                return parm;  
            }  
            /// <summary>    
            /// Get the sql that is Sorted     
            /// </summary>    
            /// <param name="sort"> sort column and values</param>    
            /// <returns>SQL sort string</returns>    
            private static string GetSort(Hashtable sort)  
            {  
                string str = "";  
                int i = 0;  
                if (sort != null && sort.Count > 0)  
                {  
                    foreach (DictionaryEntry de in sort)  
                    {  
                        i++;  
                        str += de.Key + " " + de.Value;  
                        if (i != sort.Count)  
                        {  
                            str += ",";  
                        }  
                    }  
                }  
                return str;  
            }  
      
            /// <summary>    
            /// execute a trascation include one or more sql sentence(author:donne yin)    
            /// </summary>    
            /// <param name="connectionString"></param>    
            /// <param name="cmdType"></param>    
            /// <param name="cmdTexts"></param>    
            /// <param name="commandParameters"></param>    
            /// <returns>execute trascation result(success: true | fail: false)</returns>    
            public static bool ExecuteTransaction(string connectionString, CommandType cmdType, string[] cmdTexts, params MySqlParameter[][] commandParameters)  
            {  
                MySqlConnection myConnection = new MySqlConnection(connectionString);       //get the connection object    
                myConnection.Open();                                                        //open the connection    
                MySqlTransaction myTrans = myConnection.BeginTransaction();                 //begin a trascation    
                MySqlCommand cmd = new MySqlCommand();  
                cmd.Connection = myConnection;  
                cmd.Transaction = myTrans;  
      
                try  
                {  
                    for (int i = 0; i < cmdTexts.Length; i++)  
                    {  
                        PrepareCommand(cmd, myConnection, null, cmdType, cmdTexts[i], commandParameters[i]);  
                        cmd.ExecuteNonQuery();  
                        cmd.Parameters.Clear();  
                    }  
                    myTrans.Commit();  
                }  
                catch  
                {  
                    myTrans.Rollback();  
                    return false;  
                }  
                finally  
                {  
                    myConnection.Close();  
                }  
                return true;  
            }  
            #endregion  
        }  
    }