当前位置: 移动技术网 > IT编程>开发语言>c# > C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装

C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装

2019年08月23日  | 移动技术网IT编程  | 我要评论
源码: ...

源码:

  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 }

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • 如何使用C# 捕获进程输出

    intro很多时候我们可能会需要执行一段命令获取一个输出,遇到的比较典型的就是之前我们需要用 ffmpeg 实现视频的编码压缩水印等一系列操作,当时使用的是 f... [阅读全文]
  • 全面分析c# LINQ

    大家好,这是 [c#.net 拾遗补漏] 系列的第 08 篇文章,今天讲 c# 强大的 linq 查询。linq 是我最喜欢的 c# 语言特性之一。linq 是... [阅读全文]
  • C# DataTable常见用法汇总

    c# datatable 的常见用法:(1)新建数据表。(2)向表添加列。(3)设置表特定行与列的数据值。(4)将某行数据加入到表。(5)合并表。(6)复制表。... [阅读全文]
  • C# 如何解析获取Url参数值

    今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串。样... [阅读全文]
  • C# 实现dataGridView选中一行右键出现菜单的示例代码

    在窗体中添加datagridview控件和contextmenustrip1控件,修改datagridview属性,将contextmenustrip控件绑定d... [阅读全文]
  • WPF实现手风琴式轮播图切换效果

    WPF实现手风琴式轮播图切换效果

    本文实例为大家分享了wpf实现轮播图切换效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、自定义控件myimagecontrol实现图片的裁切和动... [阅读全文]
  • WPF实现3D翻牌式倒计时特效

    WPF实现3D翻牌式倒计时特效

    本文实例为大家分享了wpf实现3d翻牌式倒计时的具体代码,供大家参考,具体内容如下实现效果如下:思路:使用自定义控件,设置一个背板 mycardcontrolb... [阅读全文]
  • WPF实现平面三角形3D运动效果

    WPF实现平面三角形3D运动效果

    本文实例为大家分享了wpf实现平面三角形3d运动效果的具体代码,供大家参考,具体内容如下实现效果如下:思路:封装三角形三个顶点和路径的三角形类,图形渲染时同步更... [阅读全文]
  • WPF实现3D粒子波浪效果

    WPF实现3D粒子波浪效果

    本文实例为大家分享了wpf实现3d粒子波浪效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、3d粒子类particle.cs2、粒子系统parti... [阅读全文]
  • 谈谈c#中的索引器

    概念索引器(indexer) 允许类中的对象可以像数组那样方便、直观的被引用。当为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array... [阅读全文]
验证码:
移动技术网