C#处理MySql多个返回集的方法
本文实例讲述了C#处理MySql多个返回集的方法。分享给大家供大家参考。具体方法如下:
关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用
做一个Mysql的简单分页查询,有两个返回集
Sql语句如下
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的实例可以参看这篇博客,各种例子是很好的
可以看到里面有我们需要的方法哈,那就是
如果想添加取消操作的可以用
MySqlDataReader是有一个NextResult的方法可以用来循环读取返回集,并返回bool类型
思路就出来了,通过判断NextResult的结果是否为false,来结束返回集的查询,通过MySqlDataAdapter类的FillAsync的方法对每个结果进行填充
/// 读取多个返回集,返回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完成填充,不知道是否合适
补充一下
conn是连接数据库用的连接实例MySqlConnection
sqlparameters是我声明的一个结构体,用来保存mysql的存储过程的输入参数
{
public string name;//存储过程的输入字符名称
public object pvalue;//存储过程的输入变量
public sqlparameters(string names, object pvalues)
{
name = names;
pvalue = pvalues;
}
}
希望本文所述对大家的C#程序设计有所帮助。
C#处理MySql多个返回集的方法的更多相关文章
- C#处理MySql多个返回集
关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用 做一个Mysql的简单分页查询,有两个返回集 Sql语句如下 SELECT COUNT(*) f ...
- 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...
- Mysql 聚合函数返回NULL
[1]聚合函数返回NULL 当where条件不满足时,聚合函数sum().avg()的返回值为NULL. (1)源数据表 (2)如下SQL语句 SELECT sClass, COUNT(*) AS t ...
- 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇
前言 有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作. 本文集中讲hapr ...
- (转)基于keepalived搭建MySQL的高可用集群
基于keepalived搭建MySQL的高可用集群 原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...
- 从零开始:Mysql基于Amoeba的集群搭建
从零开始:Mysql基于Amoeba的集群搭建 准备环境 1.mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 2.amoeba-mysql-binary-2.0. ...
- MySQL MHA 高可用集群部署及故障切换
MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...
随机推荐
- Oracle出现与并行相关的ORA-00600时的调查方法
出现了 ORA-00600[kxfpqsod_qc_sod], 如何调查呢? 例如:从trace 文件的 Call Stack,可以看到 Error: ORA-600 [kxfpqsod_qc_sod ...
- L017-linux系统定时任务crond入门小节
L017-linux系统定时任务crond入门小节 oh my god!how old are you? 怎么老是你?没错,我又来了,哈哈哈,今天是我的生日呢,在这么重要的日子里,必须要更一篇学习小节 ...
- DFA化简
首先是未化简DFA的转换表 NFA状态 DFA状态 a b {0,1,2,4,7} A B C {1,2,3,4,6,7,8} B B D {1,2,4,5,6,7} C B C {1,2,4,5,6 ...
- 如何在 vCenter Server 上将虚拟机注册或添加到清单中
免责声明:本文为 Registering or adding a virtual machine to the Inventory in vCenter Server or in an ESX/E ...
- GTX1060 深度学习工具链
通过试错,推荐GTX1060 WIN10的工具链记录如下: GPU: GTX 1060 6G OS: WIN10 CUDA:9.0 CuDNN:7.1.3 Tensorflow: Tensorflow ...
- 20135234mqy-——信息安全系统设计基础第十四周学习总结
第九章 虚拟存储器 主要作用: 将主存看作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动的区域,并根据需要在磁盘和主存之间来回传送数据: 为每个进程提供了一致的地址空间,从而简化了存储器管 ...
- 自定义SQL语句
在用@query写了sql语句后,返回的结果集不能自动转换为自定义的对象. 百度有一篇博客,解决方案是直接在sql语句里实例化对象,我用了,但是语法错误,又谷歌了下,sql语句里是不能这样写的,这是h ...
- PAT乙级(Basic Level)练习题-NowCoder数列总结
题目描述 NowCoder最近在研究一个数列: F(0) = 7 F(1) = 11 F(n) = F(n-1) + F(n-2) (n≥2) 他称之为NowCoder数列.请你帮忙确认一下数列中第n ...
- Linux命令(二十四) 磁盘管理命令(二) mkfs,mount
一.格式化文件系统 mkfs 当完成硬盘分区以后要进行硬盘的格式化,mkfs系列对应的命令用于将硬盘格式化为指定格式的文件系统.mkfs 本身并不执行建立文件系统的工作,而是去调用相关的程序来执行.例 ...
- [转帖]LNMP组件安装
https://lnmp.org/install.html 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Aliyun/Amazon/M ...