源码:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Data; 7 using MySql.Data.MySqlClient; 8 9 10 namespace Fly.Util.DataBase 11 { 12 /// <summary> 13 /// MySql数据库操作类 14 /// </summary> 15 public static class MySqlHelper 16 { 17 /// <summary> 18 /// 执行数据库非查询操作,返回受影响的行数 19 /// </summary> 20 /// <param name="connectionString">数据库连接字符串</param> 21 /// <param name="cmdType">命令的类型</param> 22 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 23 /// <param name="cmdParms">命令参数集合</param> 24 /// <returns>当前操作影响的数据行数</returns> 25 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 26 { 27 MySqlCommand cmd = new MySqlCommand(); 28 using (MySqlConnection conn = new MySqlConnection(connectionString)) 29 { 30 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 31 int val = cmd.ExecuteNonQuery(); 32 cmd.Parameters.Clear(); 33 return val; 34 } 35 } 36 37 /// <summary> 38 /// 执行数据库事务非查询操作,返回受影响的行数 39 /// </summary> 40 /// <param name="transaction">数据库事务对象</param> 41 /// <param name="cmdType">Command类型</param> 42 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 43 /// <param name="cmdParms">命令参数集合</param> 44 /// <returns>当前事务操作影响的数据行数</returns> 45 public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 46 { 47 MySqlCommand cmd = new MySqlCommand(); 48 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms); 49 int val = cmd.ExecuteNonQuery(); 50 cmd.Parameters.Clear(); 51 return val; 52 } 53 54 /// <summary> 55 /// 执行数据库非查询操作,返回受影响的行数 56 /// </summary> 57 /// <param name="connection">MySql数据库连接对象</param> 58 /// <param name="cmdType">Command类型</param> 59 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 60 /// <param name="cmdParms">命令参数集合</param> 61 /// <returns>当前操作影响的数据行数</returns> 62 public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 63 { 64 if (connection == null) 65 throw new ArgumentNullException("当前数据库连接不存在"); 66 MySqlCommand cmd = new MySqlCommand(); 67 PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms); 68 int val = cmd.ExecuteNonQuery(); 69 cmd.Parameters.Clear(); 70 return val; 71 } 72 73 /// <summary> 74 /// 执行数据库查询操作,返回MySqlDataReader类型的内存结果集 75 /// </summary> 76 /// <param name="connectionString">数据库连接字符串</param> 77 /// <param name="cmdType">命令的类型</param> 78 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 79 /// <param name="cmdParms">命令参数集合</param> 80 /// <returns>当前查询操作返回的MySqlDataReader类型的内存结果集</returns> 81 public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 82 { 83 MySqlCommand cmd = new MySqlCommand(); 84 MySqlConnection conn = new MySqlConnection(connectionString); 85 try 86 { 87 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 88 MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 89 cmd.Parameters.Clear(); 90 return reader; 91 } 92 catch 93 { 94 cmd.Dispose(); 95 conn.Close(); 96 throw; 97 } 98 } 99 100 /// <summary> 101 /// 执行数据库查询操作,返回DataSet类型的结果集 102 /// </summary> 103 /// <param name="connectionString">数据库连接字符串</param> 104 /// <param name="cmdType">命令的类型</param> 105 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 106 /// <param name="cmdParms">命令参数集合</param> 107 /// <returns>当前查询操作返回的DataSet类型的结果集</returns> 108 public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 109 { 110 MySqlCommand cmd = new MySqlCommand(); 111 MySqlConnection conn = new MySqlConnection(connectionString); 112 DataSet ds = null; 113 try 114 { 115 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 116 MySqlDataAdapter adapter = new MySqlDataAdapter(); 117 adapter.SelectCommand = cmd; 118 ds = new DataSet(); 119 adapter.Fill(ds); 120 cmd.Parameters.Clear(); 121 } 122 catch 123 { 124 throw; 125 } 126 finally 127 { 128 cmd.Dispose(); 129 conn.Close(); 130 conn.Dispose(); 131 } 132 133 return ds; 134 } 135 136 /// <summary> 137 /// 执行数据库查询操作,返回DataTable类型的结果集 138 /// </summary> 139 /// <param name="connectionString">数据库连接字符串</param> 140 /// <param name="cmdType">命令的类型</param> 141 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 142 /// <param name="cmdParms">命令参数集合</param> 143 /// <returns>当前查询操作返回的DataTable类型的结果集</returns> 144 public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 145 { 146 MySqlCommand cmd = new MySqlCommand(); 147 MySqlConnection conn = new MySqlConnection(connectionString); 148 DataTable dt = null; 149 150 try 151 { 152 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 153 MySqlDataAdapter adapter = new MySqlDataAdapter(); 154 adapter.SelectCommand = cmd; 155 dt = new DataTable(); 156 adapter.Fill(dt); 157 cmd.Parameters.Clear(); 158 } 159 catch 160 { 161 throw; 162 } 163 finally 164 { 165 cmd.Dispose(); 166 conn.Close(); 167 conn.Dispose(); 168 } 169 170 return dt; 171 } 172 173 /// <summary> 174 /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值 175 /// </summary> 176 /// <param name="connectionString">数据库连接字符串</param> 177 /// <param name="cmdType">命令的类型</param> 178 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 179 /// <param name="cmdParms">命令参数集合</param> 180 /// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns> 181 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 182 { 183 MySqlCommand cmd = new MySqlCommand(); 184 MySqlConnection conn = new MySqlConnection(connectionString); 185 object result = null; 186 try 187 { 188 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 189 result = cmd.ExecuteScalar(); 190 cmd.Parameters.Clear(); 191 } 192 catch 193 { 194 throw; 195 } 196 finally 197 { 198 cmd.Dispose(); 199 conn.Close(); 200 conn.Dispose(); 201 } 202 203 return result; 204 } 205 206 /// <summary> 207 /// 执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值 208 /// </summary> 209 /// <param name="trans">一个已存在的数据库事务对象</param> 210 /// <param name="commandType">命令类型</param> 211 /// <param name="commandText">MySql存储过程名称或PL/SQL命令</param> 212 /// <param name="cmdParms">命令参数集合</param> 213 /// <returns>当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值</returns> 214 public static object ExecuteScalar(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 215 { 216 if (trans == null) 217 throw new ArgumentNullException("当前数据库事务不存在"); 218 MySqlConnection conn = trans.Connection; 219 if (conn == null) 220 throw new ArgumentException("当前事务所在的数据库连接不存在"); 221 222 MySqlCommand cmd = new MySqlCommand(); 223 object result = null; 224 225 try 226 { 227 PrepareCommand(cmd, conn, trans, cmdType, cmdText, cmdParms); 228 result = cmd.ExecuteScalar(); 229 cmd.Parameters.Clear(); 230 } 231 catch 232 { 233 throw; 234 } 235 finally 236 { 237 trans.Dispose(); 238 cmd.Dispose(); 239 conn.Close(); 240 conn.Dispose(); 241 } 242 243 return result; 244 } 245 246 /// <summary> 247 /// 执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值 248 /// </summary> 249 /// <param name="conn">数据库连接对象</param> 250 /// <param name="cmdType">Command类型</param> 251 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 252 /// <param name="cmdParms">命令参数集合</param> 253 /// <returns>当前查询操作返回的结果集中位于第一行第一列的Object类型的值</returns> 254 public static object ExecuteScalar(MySqlConnection conn, CommandType cmdType, string cmdText, params MySqlParameter[] cmdParms) 255 { 256 if (conn == null) throw new ArgumentException("当前数据库连接不存在"); 257 MySqlCommand cmd = new MySqlCommand(); 258 object result = null; 259 260 try 261 { 262 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms); 263 result = cmd.ExecuteScalar(); 264 cmd.Parameters.Clear(); 265 } 266 catch 267 { 268 throw; 269 } 270 finally 271 { 272 cmd.Dispose(); 273 conn.Close(); 274 conn.Dispose(); 275 } 276 277 return result; 278 } 279 280 /// <summary> 281 /// 执行存储过程 282 /// </summary> 283 /// <param name="connection">MySql数据库连接对象</param> 284 /// <param name="storedProcName">存储过程名</param> 285 /// <param name="parameters">存储过程参数</param> 286 /// <returns>SqlDataReader对象</returns> 287 public static MySqlDataReader RunStoredProcedure(MySqlConnection connection, string storedProcName, IDataParameter[] parameters) 288 { 289 MySqlDataReader returnReader = null; 290 connection.Open(); 291 MySqlCommand command = BuildSqlCommand(connection, storedProcName, parameters); 292 returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); 293 return returnReader; 294 } 295 296 /// <summary> 297 /// 执行数据库命令前的准备工作 298 /// </summary> 299 /// <param name="cmd">Command对象</param> 300 /// <param name="conn">数据库连接对象</param> 301 /// <param name="trans">事务对象</param> 302 /// <param name="cmdType">Command类型</param> 303 /// <param name="cmdText">MySql存储过程名称或PL/SQL命令</param> 304 /// <param name="cmdParms">命令参数集合</param> 305 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms) 306 { 307 if (conn.State != ConnectionState.Open) 308 conn.Open(); 309 310 cmd.Connection = conn; 311 cmd.CommandText = cmdText; 312 313 if (trans != null) 314 cmd.Transaction = trans; 315 316 cmd.CommandType = cmdType; 317 318 if (cmdParms != null) 319 { 320 foreach (MySqlParameter parm in cmdParms) 321 cmd.Parameters.Add(parm); 322 } 323 } 324 325 /// <summary> 326 /// 构建SqlCommand对象 327 /// </summary> 328 /// <param name="connection">数据库连接</param> 329 /// <param name="storedProcName">存储过程名</param> 330 /// <param name="parameters">存储过程参数</param> 331 /// <returns>SqlCommand</returns> 332 private static MySqlCommand BuildSqlCommand(MySqlConnection connection, string storedProcName, IDataParameter[] parameters) 333 { 334 MySqlCommand command = new MySqlCommand(storedProcName, connection); 335 command.CommandType = CommandType.StoredProcedure; 336 foreach (MySqlParameter parameter in parameters) 337 { 338 command.Parameters.Add(parameter); 339 } 340 return command; 341 } 342 } 343 }