源码:
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 }