1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingSystem.Data;7 usingMySql.Data.MySqlClient;8
9
10 namespaceFly.Util.DataBase11 {12 ///
13 ///MySql数据库操作类14 ///
15 public static classMySqlHelper16 {17 ///
18 ///执行数据库非查询操作,返回受影响的行数19 ///
20 /// 数据库连接字符串
21 /// 命令的类型
22 /// MySql存储过程名称或PL/SQL命令
23 /// 命令参数集合
24 /// 当前操作影响的数据行数
25 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)26 {27 MySqlCommand cmd = newMySqlCommand();28 using (MySqlConnection conn = newMySqlConnection(connectionString))29 {30 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);31 int val =cmd.ExecuteNonQuery();32 cmd.Parameters.Clear();33 returnval;34 }35 }36
37 ///
38 ///执行数据库事务非查询操作,返回受影响的行数39 ///
40 /// 数据库事务对象
41 /// Command类型
42 /// MySql存储过程名称或PL/SQL命令
43 /// 命令参数集合
44 /// 当前事务操作影响的数据行数
45 public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)46 {47 MySqlCommand cmd = newMySqlCommand();48 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);49 int val =cmd.ExecuteNonQuery();50 cmd.Parameters.Clear();51 returnval;52 }53
54 ///
55 ///执行数据库非查询操作,返回受影响的行数56 ///
57 /// MySql数据库连接对象
58 /// Command类型
59 /// MySql存储过程名称或PL/SQL命令
60 /// 命令参数集合
61 /// 当前操作影响的数据行数
62 public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)63 {64 if (connection == null)65 throw new ArgumentNullException("当前数据库连接不存在");66 MySqlCommand cmd = newMySqlCommand();67 PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);68 int val =cmd.ExecuteNonQuery();69 cmd.Parameters.Clear();70 returnval;71 }72
73 ///
74 ///执行数据库查询操作,返回MySqlDataReader类型的内存结果集75 ///
76 /// 数据库连接字符串
77 /// 命令的类型
78 /// MySql存储过程名称或PL/SQL命令
79 /// 命令参数集合
80 /// 当前查询操作返回的MySqlDataReader类型的内存结果集
81 public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)82 {83 MySqlCommand cmd = newMySqlCommand();84 MySqlConnection conn = newMySqlConnection(connectionString);85 try
86 {87 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);88 MySqlDataReader reader =cmd.ExecuteReader(CommandBehavior.CloseConnection);89 cmd.Parameters.Clear();90 returnreader;91 }92 catch
93 {94 cmd.Dispose();95 conn.Close();96 throw;97 }98 }99
100 ///
101 ///执行数据库查询操作,返回DataSet类型的结果集102 ///
103 /// 数据库连接字符串
104 /// 命令的类型
105 /// MySql存储过程名称或PL/SQL命令
106 /// 命令参数集合
107 /// 当前查询操作返回的DataSet类型的结果集
108 public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)109 {110 MySqlCommand cmd = newMySqlCommand();111 MySqlConnection conn = newMySqlConnection(connectionString);112 DataSet ds = null;113 try
114 {115 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);116 MySqlDataAdapter adapter = newMySqlDataAdapter();117 adapter.SelectCommand =cmd;118 ds = newDataSet();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 returnds;134 }135
136 ///
137 ///执行数据库查询操作,返回DataTable类型的结果集138 ///
139 /// 数据库连接字符串
140 /// 命令的类型
141 /// MySql存储过程名称或PL/SQL命令
142 /// 命令参数集合
143 /// 当前查询操作返回的DataTable类型的结果集
144 public static DataTable ExecuteDataTable(string connectionString, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)145 {146 MySqlCommand cmd = newMySqlCommand();147 MySqlConnection conn = newMySqlConnection(connectionString);148 DataTable dt = null;149
150 try
151 {152 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);153 MySqlDataAdapter adapter = newMySqlDataAdapter();154 adapter.SelectCommand =cmd;155 dt = newDataTable();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 returndt;171 }172
173 ///
174 ///执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值175 ///
176 /// 数据库连接字符串
177 /// 命令的类型
178 /// MySql存储过程名称或PL/SQL命令
179 /// 命令参数集合
180 /// 当前查询操作返回的结果集中位于第一行第一列的Object类型的值
181 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)182 {183 MySqlCommand cmd = newMySqlCommand();184 MySqlConnection conn = newMySqlConnection(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 returnresult;204 }205
206 ///
207 ///执行数据库事务查询操作,返回结果集中位于第一行第一列的Object类型的值208 ///
209 /// 一个已存在的数据库事务对象
210 /// 命令类型
211 /// MySql存储过程名称或PL/SQL命令
212 /// 命令参数集合
213 /// 当前事务查询操作返回的结果集中位于第一行第一列的Object类型的值
214 public static object ExecuteScalar(MySqlTransaction trans, CommandType cmdType, string cmdText, paramsMySqlParameter[] 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 = newMySqlCommand();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 returnresult;244 }245
246 ///
247 ///执行数据库查询操作,返回结果集中位于第一行第一列的Object类型的值248 ///
249 /// 数据库连接对象
250 /// Command类型
251 /// MySql存储过程名称或PL/SQL命令
252 /// 命令参数集合
253 /// 当前查询操作返回的结果集中位于第一行第一列的Object类型的值
254 public static object ExecuteScalar(MySqlConnection conn, CommandType cmdType, string cmdText, paramsMySqlParameter[] cmdParms)255 {256 if (conn == null) throw new ArgumentException("当前数据库连接不存在");257 MySqlCommand cmd = newMySqlCommand();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 returnresult;278 }279
280 ///
281 ///执行存储过程282 ///
283 /// MySql数据库连接对象
284 /// 存储过程名
285 /// 存储过程参数
286 /// SqlDataReader对象
287 public static MySqlDataReader RunStoredProcedure(MySqlConnection connection, stringstoredProcName, IDataParameter[] parameters)288 {289 MySqlDataReader returnReader = null;290 connection.Open();291 MySqlCommand command =BuildSqlCommand(connection, storedProcName, parameters);292 returnReader =command.ExecuteReader(CommandBehavior.CloseConnection);293 returnreturnReader;294 }295
296 ///
297 ///执行数据库命令前的准备工作298 ///
299 /// Command对象
300 /// 数据库连接对象
301 /// 事务对象
302 /// Command类型
303 /// MySql存储过程名称或PL/SQL命令
304 /// 命令参数集合
305 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, stringcmdText, 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 incmdParms)321 cmd.Parameters.Add(parm);322 }323 }324
325 ///
326 ///构建SqlCommand对象327 ///
328 /// 数据库连接
329 /// 存储过程名
330 /// 存储过程参数
331 /// SqlCommand
332 private static MySqlCommand BuildSqlCommand(MySqlConnection connection, stringstoredProcName, IDataParameter[] parameters)333 {334 MySqlCommand command = newMySqlCommand(storedProcName, connection);335 command.CommandType =CommandType.StoredProcedure;336 foreach (MySqlParameter parameter inparameters)337 {338 command.Parameters.Add(parameter);339 }340 returncommand;341 }342 }343 }