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 }

你可能感兴趣的:(mysql)