• MySqlHelper c#访问MySql的工具类


    最近一段时间一直在总结过去一年中的经验教训,突然发现还没毕业那会做的项目:一平台,语言是c#,数据库用MYSQL,所以需要写一个类似于SQLHelper的类,虽然不再使用了,拿出来晒晒,说不定哪天会有人需要,也可以参考下。

    View Code
      1 /*----------------------------------------------------------------
      2 // File Name:MYSQLHelper.cs
      3 // File Description:
      4  * DataBase Deal Layer
      5  * 
      6 // Create Mark:
      7  * Create Date:  2011-04-14
      8  * Create By: Mike.Jiang
      9 // Modify Mark:
     10  * Modify Date
     11  * Modify By
     12 //----------------------------------------------------------------*/
     13 using System;
     14 using System.Collections.Generic;
     15 using System.Text;
     16 using System.Data;
     17 using System.Collections;
     18 using MySql.Data.MySqlClient;
     19 using System.Configuration;
     20 using System.IO;
     21 
     22 
     23 namespace PLA.DBUtility
     24 {
     25     /// <summary>
     26     /// when use mysql database application this class 
     27     /// Generic database access code 
     28     /// this class that is a abstract,which does not allow instantiation, the application can directly call it
     29     /// </summary>
     30     public abstract class MYSQLHelper
     31     {
     32         //Get the database connectionstring, which are static variables and readonly, all project documents can be used directly, but can not modify it 
     33         //the database connectionString 
     34         //public static readonly string connectionStringManager = ConfigurationManager.ConnectionStrings["MYSQLConnectionString"].ConnectionString;
     35         public static string ConnectionStringManager {
     36             get{return connectionStringManager; }
     37         }
     38 
     39 
     40 
     41         //This connectionString for the local test
     42         public static readonly string connectionStringManager = ConfigurationManager.ConnectionStrings["LocalMYSQLConnectionString"].ConnectionString;
     43 
     44         //hashtable to store the parameter information, the hash table can store any type of argument 
     45         //Here the hashtable is static types of static variables, since it is static, that is a definition of global use.
     46         //All parameters are using this hash table, how to ensure that others in the change does not affect their time to read it
     47         //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.
     48         //Now .NET provides a HashTable's Synchronized methods to achieve the same function, no need to manually lock, completed directly by the system framework 
     49         private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
     50 
     51         /// <summary>
     52         /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring 
     53         /// The parameter list using parameters that in array forms
     54         /// </summary>
     55         /// <remarks>
     56         /// Usage example: 
     57         /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure,
     58         /// "PublishOrders", new MySqlParameter("@prodid", 24));
     59         /// </remarks>
     60         /// <param name="connectionString">a valid database connectionstring</param>
     61             /// <param name="cmdType">MySqlCommand command type (stored procedures, T-SQL statement, and so on.) </param>
     62         /// <param name="cmdText">stored procedure name or T-SQL statement</param>
     63         /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>
     64         /// <returns>Returns a value that means number of rows affected/returns>
     65         public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
     66         {
     67             MySqlCommand cmd = new MySqlCommand();
     68 
     69             using (MySqlConnection conn = new MySqlConnection(connectionString))
     70             {
     71                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
     72                 int val = cmd.ExecuteNonQuery();
     73                 cmd.Parameters.Clear();
     74                 return val;
     75             }
     76         }
     77 
     78         /// <summary>
     79         /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring 
     80         /// The parameter list using parameters that in array forms
     81         /// </summary>
     82         /// <remarks>
     83         /// Usage example: 
     84         /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure,
     85         /// "PublishOrders", new MySqlParameter("@prodid", 24));
     86         /// </remarks>
     87         /// <param name="cmdType">MySqlCommand command type (stored procedures, T-SQL statement, and so on.) </param>
     88         /// <param name="connectionString">a valid database connectionstring</param>
     89         /// <param name="cmdText">stored procedure name or T-SQL statement</param>
     90         /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>
     91         /// <returns>Returns true or false </returns>
     92         public static bool ExecuteNonQuery(CommandType cmdType, string connectionString, string cmdText, params MySqlParameter[] commandParameters)
     93         {
     94             MySqlCommand cmd = new MySqlCommand();
     95 
     96             using (MySqlConnection conn = new MySqlConnection(connectionString))
     97             {
     98                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
     99                 try
    100                 {
    101                     int val = cmd.ExecuteNonQuery();
    102                     return true;
    103                 }
    104                 catch
    105                 {
    106                     return false;
    107                 }
    108                 finally 
    109                 {
    110                     cmd.Parameters.Clear();
    111                 }
    112             }
    113         }
    114         /// <summary>
    115         /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring 
    116         /// Array of form parameters using the parameter list 
    117         /// </summary>
    118         /// <param name="conn">connection</param>
    119         /// <param name="cmdType">MySqlCommand command type (stored procedures, T-SQL statement, and so on.)</param>
    120         /// <param name="cmdText">stored procedure name or T-SQL statement</param>
    121         /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>
    122         /// <returns>Returns a value that means number of rows affected</returns>
    123         public static int ExecuteNonQuery(MySqlConnection conn, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
    124         {
    125             MySqlCommand cmd = new MySqlCommand();
    126             PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
    127             int val = cmd.ExecuteNonQuery();
    128             cmd.Parameters.Clear();
    129             return val;
    130         }
    131 
    132         /// <summary>
    133         /// Execute a SqlCommand command that does not return value, by appointed and specified connectionstring 
    134         /// Array of form parameters using the parameter list 
    135         /// </summary>
    136         /// <param name="conn">sql Connection that has transaction</param>
    137         /// <param name="cmdType">SqlCommand command type (stored procedures, T-SQL statement, and so on.)</param>
    138         /// <param name="cmdText">stored procedure name or T-SQL statement</param>
    139         /// <param name="commandParameters">MySqlCommand to provide an array of parameters used in the list</param>
    140         /// <returns>Returns a value that means number of rows affected </returns>
    141         public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
    142         {
    143             MySqlCommand cmd = new MySqlCommand();
    144             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
    145             int val = cmd.ExecuteNonQuery();
    146             cmd.Parameters.Clear();
    147             return val;
    148         }
    149 
    150         /// <summary>
    151         /// Call method of sqldatareader to read data
    152         /// </summary>
    153         /// <param name="connectionString">connectionstring</param>
    154         /// <param name="cmdType">command type, such as using stored procedures: CommandType.StoredProcedure</param>
    155         /// <param name="cmdText">stored procedure name or T-SQL statement</param>
    156         /// <param name="commandParameters">parameters</param>
    157         /// <returns>SqlDataReader type of data collection</returns>
    158         public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
    159         {
    160             MySqlCommand cmd = new MySqlCommand();
    161             MySqlConnection conn = new MySqlConnection(connectionString);
    162 
    163             // we use a try/catch here because if the method throws an exception we want to 
    164             // close the connection throw code, because no datareader will exist, hence the 
    165             // commandBehaviour.CloseConnection will not work
    166             try
    167             {
    168                 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
    169                 MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    170                 cmd.Parameters.Clear();
    171                 return rdr;
    172             }
    173             catch
    174             {
    175                 conn.Close();
    176                 throw;
    177             }
    178         }
    179 
    180         /// <summary>
    181         /// use the ExectueScalar to read a single result
    182         /// </summary>
    183         /// <param name="connectionString">connectionstring</param>
    184         /// <param name="cmdType">command type, such as using stored procedures: CommandType.StoredProcedure</param>
    185         /// <param name="cmdText">stored procedure name or T-SQL statement</param>
    186         /// <param name="commandParameters">parameters</param>
    187         /// <returns>a value in object type</returns>
    188         public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
    189         {
    190             MySqlCommand cmd = new MySqlCommand();
    191 
    192             using (MySqlConnection connection = new MySqlConnection(connectionString))
    193             {
    194                 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
    195                 object val = cmd.ExecuteScalar();
    196                 cmd.Parameters.Clear();
    197                 return val;
    198             }
    199         }
    200 
    201         public static DataSet GetDataSet(string connectionString, string cmdText, params MySqlParameter[] commandParameters)
    202         {
    203             DataSet retSet = new DataSet();
    204             using (MySqlDataAdapter msda = new MySqlDataAdapter(cmdText, connectionString))
    205             {
    206                 msda.Fill(retSet);
    207             }
    208             return retSet;
    209         }
    210 
    211         /// <summary>
    212         /// cache the parameters in the HashTable
    213         /// </summary>
    214         /// <param name="cacheKey">hashtable key name</param>
    215         /// <param name="commandParameters">the parameters that need to cached</param>
    216         public static void CacheParameters(string cacheKey, params MySqlParameter[] commandParameters)
    217         {
    218             parmCache[cacheKey] = commandParameters;
    219         }
    220 
    221         /// <summary>
    222         /// get parameters in hashtable by cacheKey
    223         /// </summary>
    224         /// <param name="cacheKey">hashtable key name</param>
    225         /// <returns>the parameters</returns>
    226         public static MySqlParameter[] GetCachedParameters(string cacheKey)
    227         {
    228             MySqlParameter[] cachedParms = (MySqlParameter[])parmCache[cacheKey];
    229 
    230             if (cachedParms == null)
    231                 return null;
    232 
    233             MySqlParameter[] clonedParms = new MySqlParameter[cachedParms.Length];
    234 
    235             for (int i = 0, j = cachedParms.Length; i < j; i++)
    236                 clonedParms[i] = (MySqlParameter)((ICloneable)cachedParms[i]).Clone();
    237 
    238             return clonedParms;
    239         }
    240 
    241         /// <summary>
    242         ///Prepare parameters for the implementation of the command
    243         /// </summary>
    244         /// <param name="cmd">mySqlCommand command</param>
    245         /// <param name="conn">database connection that is existing</param>
    246         /// <param name="trans">database transaction processing </param>
    247         /// <param name="cmdType">SqlCommand command type (stored procedures, T-SQL statement, and so on.) </param>
    248         /// <param name="cmdText">Command text, T-SQL statements such as Select * from Products</param>
    249         /// <param name="cmdParms">return the command that has parameters</param>
    250         private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
    251         {
    252             if (conn.State != ConnectionState.Open)
    253                 conn.Open();
    254 
    255             cmd.Connection = conn;
    256             cmd.CommandText = cmdText;
    257 
    258             if (trans != null)
    259                 cmd.Transaction = trans;
    260 
    261             cmd.CommandType = cmdType;
    262 
    263             if (cmdParms != null)
    264                 foreach (MySqlParameter parm in cmdParms)
    265                     cmd.Parameters.Add(parm);
    266         }
    267         #region parameters
    268         /// <summary>
    269         /// Set parameters
    270         /// </summary>
    271         /// <param name="ParamName">parameter name</param>
    272         /// <param name="DbType">data type</param>
    273         /// <param name="Size">type size</param>
    274         /// <param name="Direction">input or output</param>
    275         /// <param name="Value">set the value</param>
    276         /// <returns>Return parameters that has been assigned</returns>
    277         public static MySqlParameter CreateParam(string ParamName, MySqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
    278         {
    279             MySqlParameter param;
    280 
    281 
    282             if (Size > 0)
    283             {
    284                 param = new MySqlParameter(ParamName, DbType, Size);
    285             }
    286             else
    287             {
    288 
    289                 param = new MySqlParameter(ParamName, DbType);
    290             }
    291 
    292 
    293             param.Direction = Direction;
    294             if (!(Direction == ParameterDirection.Output && Value == null))
    295             {
    296                 param.Value = Value;
    297             }
    298 
    299 
    300             return param;
    301         }
    302 
    303         /// <summary>
    304         /// set Input parameters
    305         /// </summary>
    306         /// <param name="ParamName">parameter names, such as:@ id </param>
    307         /// <param name="DbType">parameter types, such as: MySqlDbType.Int</param>
    308         /// <param name="Size">size parameters, such as: the length of character type for the 100</param>
    309         /// <param name="Value">parameter value to be assigned</param>
    310         /// <returns>Parameters</returns>
    311         public static MySqlParameter CreateInParam(string ParamName, MySqlDbType DbType, int Size, object Value)
    312         {
    313             return CreateParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
    314         }
    315 
    316         /// <summary>
    317         /// Output parameters 
    318         /// </summary>
    319         /// <param name="ParamName">parameter names, such as:@ id</param>
    320         /// <param name="DbType">parameter types, such as: MySqlDbType.Int</param>
    321         /// <param name="Size">size parameters, such as: the length of character type for the 100</param>
    322         /// <param name="Value">parameter value to be assigned</param>
    323         /// <returns>Parameters</returns>
    324         public static MySqlParameter CreateOutParam(string ParamName, MySqlDbType DbType, int Size)
    325         {
    326             return CreateParam(ParamName, DbType, Size, ParameterDirection.Output, null);
    327         }
    328 
    329         /// <summary>
    330         /// Set return parameter value 
    331         /// </summary>
    332         /// <param name="ParamName">parameter names, such as:@ id</param>
    333         /// <param name="DbType">parameter types, such as: MySqlDbType.Int</param>
    334         /// <param name="Size">size parameters, such as: the length of character type for the 100</param>
    335         /// <param name="Value">parameter value to be assigned<</param>
    336         /// <returns>Parameters</returns>
    337         public static MySqlParameter CreateReturnParam(string ParamName, MySqlDbType DbType, int Size)
    338         {
    339             return CreateParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
    340         }
    341 
    342         /// <summary>
    343         /// Generate paging storedProcedure parameters
    344         /// </summary>
    345         /// <param name="CurrentIndex">CurrentPageIndex</param>
    346         /// <param name="PageSize">pageSize</param>
    347         /// <param name="WhereSql">query Condition</param>
    348         /// <param name="TableName">tableName</param>
    349         /// <param name="Columns">columns to query</param>
    350         /// <param name="Sort">sort</param>
    351         /// <returns>MySqlParameter collection</returns>
    352         public static MySqlParameter[] GetPageParm(int CurrentIndex, int PageSize, string WhereSql, string TableName, string Columns, Hashtable Sort)
    353         {
    354             MySqlParameter[] parm = { 
    355                                   MYSQLHelper.CreateInParam("@CurrentIndex",  MySqlDbType.Int32,      4,      CurrentIndex    ),
    356                                   MYSQLHelper.CreateInParam("@PageSize",      MySqlDbType.Int32,      4,      PageSize        ),
    357                                   MYSQLHelper.CreateInParam("@WhereSql",      MySqlDbType.VarChar,  2500,    WhereSql        ),
    358                                   MYSQLHelper.CreateInParam("@TableName",     MySqlDbType.VarChar,  20,     TableName       ),
    359                                   MYSQLHelper.CreateInParam("@Column",        MySqlDbType.VarChar,  2500,    Columns         ),
    360                                   MYSQLHelper.CreateInParam("@Sort",          MySqlDbType.VarChar,  50,     GetSort(Sort)   ),
    361                                   MYSQLHelper.CreateOutParam("@RecordCount",  MySqlDbType.Int32,      4                       )
    362                                   };
    363             return parm;
    364         }
    365         /// <summary>
    366         /// Statistics data that in table
    367         /// </summary>
    368         /// <param name="TableName">table name</param>
    369         /// <param name="Columns">Statistics column</param>
    370         /// <param name="WhereSql">conditions</param>
    371         /// <returns>Set of parameters</returns>
    372         public static MySqlParameter[] GetCountParm(string TableName, string Columns, string WhereSql)
    373         {
    374             MySqlParameter[] parm = { 
    375                                   MYSQLHelper.CreateInParam("@TableName",     MySqlDbType.VarChar,  20,     TableName       ),
    376                                   MYSQLHelper.CreateInParam("@CountColumn",  MySqlDbType.VarChar,  20,     Columns         ),
    377                                   MYSQLHelper.CreateInParam("@WhereSql",      MySqlDbType.VarChar,  250,    WhereSql        ),
    378                                   MYSQLHelper.CreateOutParam("@RecordCount",  MySqlDbType.Int32,      4                       )
    379                                   };
    380             return parm;
    381         }
    382         /// <summary>
    383         /// Get the sql that is Sorted 
    384         /// </summary>
    385         /// <param name="sort"> sort column and values</param>
    386         /// <returns>SQL sort string</returns>
    387         private static string GetSort(Hashtable sort)
    388         {
    389             string str = "";
    390             int i = 0;
    391             if (sort != null && sort.Count > 0)
    392             {
    393                 foreach (DictionaryEntry de in sort)
    394                 {
    395                     i++;
    396                     str += de.Key + " " + de.Value;
    397                     if (i != sort.Count)
    398                     {
    399                         str += ",";
    400                     }
    401                 }
    402             }
    403             return str;
    404         }
    405 
    406         /// <summary>
    407         /// execute a trascation include one or more sql sentence(author:donne yin)
    408         /// </summary>
    409         /// <param name="connectionString"></param>
    410         /// <param name="cmdType"></param>
    411         /// <param name="cmdTexts"></param>
    412         /// <param name="commandParameters"></param>
    413         /// <returns>execute trascation result(success: true | fail: false)</returns>
    414         public static bool ExecuteTransaction(string connectionString, CommandType cmdType, string[] cmdTexts, params MySqlParameter[][] commandParameters)
    415         {
    416             MySqlConnection myConnection = new MySqlConnection(connectionString);       //get the connection object
    417             myConnection.Open();                                                        //open the connection
    418             MySqlTransaction myTrans = myConnection.BeginTransaction();                 //begin a trascation
    419             MySqlCommand cmd = new MySqlCommand();
    420             cmd.Connection = myConnection;
    421             cmd.Transaction = myTrans;
    422 
    423             try
    424             {
    425                 for (int i = 0;i<cmdTexts.Length; i++)
    426                 {
    427                     PrepareCommand(cmd, myConnection, null, cmdType, cmdTexts[i], commandParameters[i]);
    428                     cmd.ExecuteNonQuery();
    429                     cmd.Parameters.Clear();
    430                 }
    431                 myTrans.Commit();
    432             }
    433             catch
    434             {
    435                 myTrans.Rollback();
    436                 return false;
    437             }
    438             finally
    439             {
    440                 myConnection.Close();
    441             }
    442             return true;
    443         }
    444         #endregion
    445     }
    446 }
  • 相关阅读:
    10 Unit Testing and Automation Tools and Libraries Java Programmers Should Learn
    nginx unit java 试用
    Oracle Trace文件生成及查看
    记录数过亿条的表数据维护-数据删除
    对于上千万甚至上亿的数据,如何正确的删除?
    怎么快速删除大数据量表
    如何启动或关闭oracle的归档(ARCHIVELOG)模式
    oracle清理归档日志(缓存)
    HTTP和HTTPS协议,看一篇就够了
    HTTP与HTTPS对访问速度(性能)的影响
  • 原文地址:https://www.cnblogs.com/dataadapter/p/2550065.html
Copyright © 2020-2023  润新知