本文实例讲述了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类

现在多了很多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#程序设计有所帮助。

C#处理MySql多个返回集的方法的更多相关文章

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

    关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用 做一个Mysql的简单分页查询,有两个返回集 Sql语句如下 SELECT COUNT(*) f ...

  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. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  9. MySQL大数据量分页查询方法及其优化

    MySQL大数据量分页查询方法及其优化   ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...

随机推荐

  1. adb连接不上手机的解决方案

    一.确认手机的USB调试接口是打开的:----------打开开发者模式,暴击手机版本号多次,直到提示已打开开发者模式. 二.使用USB线连接电脑和手机,可以首先执行adb remount(重新挂载系 ...

  2. 设计模式 笔记 模版方法模式 Template Method

    //---------------------------15/04/28---------------------------- //TemplateMethod 模版方法模式----类行为型模式 ...

  3. Redux系列x:源码解析

    写在前面 redux的源码很简洁,除了applyMiddleware比较绕难以理解外,大部分还是 这里假设读者对redux有一定了解,就不科普redux的概念和API啥的啦,这部分建议直接看官方文档. ...

  4. gulp:入门简介

    本文是gulp的入门级介绍,主要内容包括什么是gulp,gulp与grunt有什么区别,gulp可以解决grunt存在的哪些问题,以及一个简单的说明例子. 什么是gulp gulp的官方定义非常简洁: ...

  5. 如何干净的卸载docker

    先上服务器环境信息: 卸载的原因: 宿主机过段时间就磁盘100%了,导致continart异常退出,后来找了很多解决方案,才发现是安装docker的时候有个配置文件错误(正常的应该是|Storage ...

  6. mui框架(一)

    1.界面初始化 初始化就是把一切程序设为默认状态,把没准备的准备好. mui框架将很多功能配置都集中在mui.init方法中,要使用某项功能,只需要在mui.init方法中完成对应参数配置即可,目前支 ...

  7. Hexo初体验

    title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...

  8. PHP学习 Object Oriented 面向对象 OO

    定义类class class_name [extends partclass_name]{public private protected var property_name = value;publ ...

  9. PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历

    题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子. ...

  10. linux第四章笔记

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. 最大限度利用处理器时间的原则:只要有可以执行 ...