这篇文章主要介绍了C#实现操作MySql数据层类MysqlHelper,实例分析了C#操作MySQL的常用技巧,并将其封装入一个类中以方便调用。
本文实例讲述了C#实现操作MySql数据层类MysqlHelper。分享给大家供大家参考。具体如下:
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Xml.Linq; 8 using MySql.Data; 9 using MySql.Data.MySqlClient; 10 namespace XX.DAL 11 { 12 public abstract class MySqlHelper 13 { 14 //数据库连接字符串 15 public static string Conn = "Database='device_manage';Data Source='localhost';User Id='root';Password='123456';charset='utf8';pooling=true;Allow Zero Datetime=True"; 16 17 /// <summary> 18 /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集) 19 /// </summary> 20 /// <param name="connectionString">一个有效的连接字符串</param> 21 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 22 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 23 /// <param name="commandParameters">执行命令所用参数的集合</param> 24 /// <returns>执行命令所影响的行数</returns> 25 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 26 { 27 MySqlCommand cmd = new MySqlCommand(); 28 using (MySqlConnection conn = new MySqlConnection(connectionString)) 29 { 30 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 31 int val = cmd.ExecuteNonQuery(); 32 cmd.Parameters.Clear(); 33 return val; 34 } 35 } 36 37 /// <summary> 38 /// 用现有的数据库连接执行一个sql命令(不返回数据集) 39 /// </summary> 40 /// <param name="connection">一个现有的数据库连接</param> 41 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 42 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 43 /// <param name="commandParameters">执行命令所用参数的集合</param> 44 /// <returns>执行命令所影响的行数</returns> 45 public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 46 { 47 MySqlCommand cmd = new MySqlCommand(); 48 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 49 int val = cmd.ExecuteNonQuery(); 50 cmd.Parameters.Clear(); 51 return val; 52 } 53 54 /// <summary> 55 ///使用现有的SQL事务执行一个sql命令(不返回数据集) 56 /// </summary> 57 /// <remarks> 58 ///举例: 59 /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 60 /// </remarks> 61 /// <param name="trans">一个现有的事务</param> 62 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 63 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 64 /// <param name="commandParameters">执行命令所用参数的集合</param> 65 /// <returns>执行命令所影响的行数</returns> 66 public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 67 { 68 MySqlCommand cmd = new MySqlCommand(); 69 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); 70 int val = cmd.ExecuteNonQuery(); 71 cmd.Parameters.Clear(); 72 return val; 73 } 74 75 /// <summary> 76 /// 用执行的数据库连接执行一个返回数据集的sql命令 77 /// </summary> 78 /// <remarks> 79 /// 举例: 80 /// MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 81 /// </remarks> 82 /// <param name="connectionString">一个有效的连接字符串</param> 83 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 84 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 85 /// <param name="commandParameters">执行命令所用参数的集合</param> 86 /// <returns>包含结果的读取器</returns> 87 public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 88 { 89 //创建一个MySqlCommand对象 90 MySqlCommand cmd = new MySqlCommand(); 91 //创建一个MySqlConnection对象 92 MySqlConnection conn = new MySqlConnection(connectionString); 93 //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在, 94 //因此commandBehaviour.CloseConnection 就不会执行 95 try 96 { 97 //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数 98 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 99 //调用 MySqlCommand 的 ExecuteReader 方法 100 MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 101 //清除参数 102 cmd.Parameters.Clear(); 103 return reader; 104 } 105 catch 106 { 107 //关闭连接,抛出异常 108 conn.Close(); 109 throw; 110 } 111 } 112 113 /// <summary> 114 /// 返回DataSet 115 /// </summary> 116 /// <param name="connectionString">一个有效的连接字符串</param> 117 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 118 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 119 /// <param name="commandParameters">执行命令所用参数的集合</param> 120 /// <returns></returns> 121 public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 122 { 123 //创建一个MySqlCommand对象 124 MySqlCommand cmd = new MySqlCommand(); 125 //创建一个MySqlConnection对象 126 MySqlConnection conn = new MySqlConnection(connectionString); 127 //在这里我们用一个try/catch结构执行sql文本命令/存储过程, 128 //因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在, 129 try 130 { 131 //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数 132 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 133 //调用 MySqlCommand 的 ExecuteReader 方法 134 MySqlDataAdapter adapter = new MySqlDataAdapter(); 135 adapter.SelectCommand = cmd; 136 DataSet ds = new DataSet(); 137 adapter.Fill(ds); 138 //清除参数 139 cmd.Parameters.Clear(); 140 conn.Close(); 141 return ds; 142 } 143 catch (Exception e) 144 { 145 throw e; 146 } 147 } 148 149 /// <summary> 150 /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列 151 /// </summary> 152 /// <remarks> 153 ///例如: 154 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 155 /// </remarks> 156 ///<param name="connectionString">一个有效的连接字符串</param> 157 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 158 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 159 /// <param name="commandParameters">执行命令所用参数的集合</param> 160 /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns> 161 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 162 { 163 MySqlCommand cmd = new MySqlCommand(); 164 using (MySqlConnection connection = new MySqlConnection(connectionString)) 165 { 166 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 167 object val = cmd.ExecuteScalar(); 168 cmd.Parameters.Clear(); 169 return val; 170 } 171 } 172 173 /// <summary> 174 /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列 175 /// </summary> 176 /// <remarks> 177 /// 例如: 178 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); 179 /// </remarks> 180 /// <param name="connection">一个存在的数据库连接</param> 181 /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param> 182 /// <param name="cmdText">存储过程名称或者sql命令语句</param> 183 /// <param name="commandParameters">执行命令所用参数的集合</param> 184 /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns> 185 public static object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) 186 { 187 MySqlCommand cmd = new MySqlCommand(); 188 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 189 object val = cmd.ExecuteScalar(); 190 cmd.Parameters.Clear(); 191 return val; 192 } 193 194 /// <summary> 195 /// 准备执行一个命令 196 /// </summary> 197 /// <param name="cmd">sql命令</param> 198 /// <param name="conn">OleDb连接</param> 199 /// <param name="trans">OleDb事务</param> 200 /// <param name="cmdType">命令类型例如 存储过程或者文本</param> 201 /// <param name="cmdText">命令文本,例如:Select * from Products</param> 202 /// <param name="cmdParms">执行命令的参数</param> 203 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms) 204 { 205 if (conn.State != ConnectionState.Open) 206 conn.Open(); 207 cmd.Connection = conn; 208 cmd.CommandText = cmdText; 209 if (trans != null) 210 cmd.Transaction = trans; 211 cmd.CommandType = cmdType; 212 if (cmdParms != null) 213 { 214 foreach (MySqlParameter parm in cmdParms) 215 cmd.Parameters.Add(parm); 216 } 217 } 218 } 219 }