• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C#处置MySql多个返回集_mysql

mysql 搞代码 7年前 (2018-06-07) 148次浏览 已收录 0个评论

C#处理mysql多个返回集

关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用

做一个Mysql的简单分页查询,有两个返回集

Sql语句如下

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类

C#处置MySql多个返回集_mysql

现在多了很多FillAsync的方法,用的Task异步写入。关于Task的实例可以参看这篇博客,各种例子是很好的

可以看到里面有我们需要的方法哈,那就是

public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader);

如果想添加取消操作的可以用

public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader, CancellationToken cancellationToken)

MySqlDataReader是有一个NextResult的方法可以用来循环读取返回集,并返回bool类型

思路就出来了,通过判断NextResult的结果是否为false,来结束返回集的查询,通过MySqlDataAdapter类的FillAsync的方法对每个结果进行填充

        /// <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完成填充,不知道是否合适
mysqldata.FillAsync(dt, mysqlreser).Wait(_cts);//等待线程完成

补充一下

conn是连接数据库用的连接实例MySqlConnection

sqlparameters是我声明的一个结构体,用来保存mysql的存储过程的输入参数

public struct sqlparameters     {         public string name;//存储过程的输入字符名称         public object pvalue;//存储过程的输入变量         public sqlparameters(string names, object pvalues)         {             name = names;             pvalue = pvalues;         }     }

欢迎大家阅读《C#处置MySql多个返回集_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#处置MySql多个返回集_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址