关于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类

现在多了很多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多个返回集的更多相关文章

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

    本文实例讲述了C#处理MySql多个返回集的方法.分享给大家供大家参考.具体方法如下: 关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用 做一个M ...

  2. 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建

    preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...

  3. Mysql 聚合函数返回NULL

    [1]聚合函数返回NULL 当where条件不满足时,聚合函数sum().avg()的返回值为NULL. (1)源数据表 (2)如下SQL语句 SELECT sClass, COUNT(*) AS t ...

  4. 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇

    前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...

  5. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  6. 从零开始:Mysql基于Amoeba的集群搭建

    从零开始:Mysql基于Amoeba的集群搭建 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.amoeba-mysql-binary-2.0. ...

  7. MySQL MHA 高可用集群部署及故障切换

    MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...

  8. Mysql AVG() 值 返回NULL而非空结果集

    [1]select 查询返回一行NULL 先来模拟复现一下遇到的问题. (1)源数据表grades,学生成绩表 (2)查询SQL语句 查询‘080601’班的各门课平均成绩 SELECT sClass ...

  9. Eclipse中java获得mysql的查询结果集

    不废话,先上代码,再上解释说明 package com.ningmeng; import java.sql.*; /** * 1:获取查询结果集 * @author biexiansheng * */ ...

随机推荐

  1. ant Form 常用 api

    经过 Form.create 包装的组件将会自带 this.props.form 属性,this.props.form 提供的 API 如下: 注意:使用 getFieldsValue getFiel ...

  2. libevent2源码分析之二:初始化流程

    本文并不很详细地分析初始化的各个细节,而重点分析如何将底层操作关联到event_base的相关字段.初始化工作主要是针对event_base的.libevent2支持多种底层实现,有epoll, se ...

  3. WifiStateMachine学习笔记

    WifiStateMachine 1. 初始化 传入接口名称wlanInterface 新建一个WiFi类型的NetworkInfo 发一个ssid为null的广播 电池 NetworkManagem ...

  4. 【Oracle】查找每期数据都存在的产品

    现在存在以下数据 如上图:A01与A02同时存在201710.201711.201712中 我们现在要将其查找出来 如果上图的表结构如下: 那么查询的SQL如下: SELECT DISTINCT CO ...

  5. iOSeasy造成循引用的场景

    场景一 :NStimer timer就是一个能在从如今開始的未来的某一个时刻又或者周期性的运行我们指定的方法的对象 NSTimer运行的必要条件:相应线程的RunLoop要开启,mode要相应 以下看 ...

  6. python 列表,元组,字符串方法和属性

    python序列包含列表[].元组().字符串三种 -------列表-------------- 一.列表基本内容 1.建立:a=[1,2,3,5],通过[ , ,], >>>b= ...

  7. Flume、Kafka、Storm结合

    Todo: 对Flume的sink进行重构,调用kafka的消费生产者(producer)发送消息; 在Sotrm的spout中继承IRichSpout接口,调用kafka的消息消费者(Consume ...

  8. ScrollView嵌套ListView冲突问题的最优解决方式

    项目做多了之后.会发现事实上ScrollView嵌套ListVew或者GridView等非经常常使用,可是你也会发现各种奇怪问题产生.依据个人经验如今列出常见问题以及代码最少最简单的解决方法. 问题一 ...

  9. JS倒计时效果

    [html] <div id="time"></div> <script> var pad = function(num){ return nu ...

  10. ORCAD常见DRC错误

    一下就是网上整理的: https://blog.csdn.net/weixin_39671078/article/details/85344762 https://wenku.baidu.com/vi ...