源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#处理MySql多个返回集的方法

  • 时间:2020-05-09 08:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#处理MySql多个返回集的方法
本文实例讲述了C#处理MySql多个返回集的方法。分享给大家供大家参考。具体方法如下: 关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用 做一个Mysql的简单分页查询,有两个返回集 Sql语句如下
[u]复制代码[/u] 代码如下:
SELECT COUNT(*) from  poster; select     t.PosterID,     t.PostTime,     t.Title  from app_us_poster t ORDER BY t.PostTime desc LIMIT startPageNum,endPageNum;
这里MySql中返回是两个集,如何通过C#获取这两个值呢,需要用到MySqlDataAdapter和MySqlDataReader这两个类 查看MySqlDataAdapter类 [img]http://files.jb51.net/file_images/article/201412/201412493308573.png?201411493325[/img] 现在多了很多FillAsync的方法,用的Task异步写入。关于Task的实例可以参看这篇博客,各种例子是很好的 可以看到里面有我们需要的方法哈,那就是
[u]复制代码[/u] 代码如下:
public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader);
如果想添加取消操作的可以用
[u]复制代码[/u] 代码如下:
public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader, CancellationToken cancellationToken)
MySqlDataReader是有一个NextResult的方法可以用来循环读取返回集,并返回bool类型 思路就出来了,通过判断NextResult的结果是否为false,来结束返回集的查询,通过MySqlDataAdapter类的FillAsync的方法对每个结果进行填充
[u]复制代码[/u] 代码如下:
/// <summary> /// 读取多个返回集,返回List<DataTable> /// </summary> /// <param name="StoredName"></param> /// <param name="Parameters"></param> /// <returns></returns> public List<DataTable> StroedGetTableList(string StoredName, List<sqlparameters> Parameters) {     MySqlDataAdapter mysqldata = new MySqlDataAdapter();     MySqlCommand sqlCommand = new MySqlCommand();     sqlCommand.CommandText = StoredName;//存储过程名称     sqlCommand.CommandType = CommandType.StoredProcedure;     sqlCommand.Connection = conn;     for (int i = 0; i < Parameters.Count; i++)     {  sqlCommand.Parameters.AddWithValue(Parameters[i].name, Parameters[i].pvalue);     }     conn.Open();     List<DataTable> dts = new List<DataTable>();     MySqlDataReader mysqlreser = sqlCommand.ExecuteReader();//mysqlreader无构造函数     bool re = true;     System.Threading.CancellationToken _cts;//用于Cancel用的     while (re)     {  DataTable dt = new DataTable();  mysqldata.FillAsync(dt, mysqlreser).Wait(_cts);//等待线程完成    dts.Add(dt);  re = mysqlreser.NextResult();//取下一个结果集       //  Trace.WriteLine(dt.Rows.Count);            }     conn.Close();     return dts; }
这里我用的阻塞主线程等待dt完成填充,不知道是否合适
[u]复制代码[/u] 代码如下:
mysqldata.FillAsync(dt, mysqlreser).Wait(_cts);//等待线程完成
补充一下 conn是连接数据库用的连接实例MySqlConnection sqlparameters是我声明的一个结构体,用来保存mysql的存储过程的输入参数
[u]复制代码[/u] 代码如下:
public struct sqlparameters {         public string name;//存储过程的输入字符名称         public object pvalue;//存储过程的输入变量         public sqlparameters(string names, object pvalues)         {             name = names;             pvalue = pvalues;         } }
希望本文所述对大家的C#程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部