C#处理MySql多个返回集的方法
作者:shichen2014 发布时间:2024-01-21 15:30:08
本文实例讲述了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#程序设计有所帮助。


猜你喜欢
- SQL SERVER 2000安装教程:https://www.jb51.net/article/37380.htm1、如果您的SQL空间开
- 以前跟同事开玩笑时说过,我们遇到的用户在访谈测试过程中的表现基本上就三种类型,发泄型,赞美型和实话实说型。发泄型用户通常是在产品的使用过程中
- 本文实例讲述了python迭代器常见用法。分享给大家供大家参考,具体如下:迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置
- 最近工作中刚好要清洗一批客户数据,涉及到身份证号码15位和18位的转换,特意研究了下,在这里分享下。身份证号码的构成既然谈到了身
- oracle10g数据备份 1.用sql/plus developer,选中要备份的数据表,右击选择"Export data&qu
- 本文介绍了python同时替换多个字符串方法示例,分享给大家,具体如下:import rewords = ''' &
- 1.前言选项(Options)模式是对配置(Configuration)的功能的延伸。在12章(ASP.NET Core中的配置二)Conf
- 由于python2和python3在部分语法上不兼容, 导致有人打趣道:"Python2和Python3是两门语言"对于
- 定义线程最简单的方法:使用target指定线程要执行的目标函数,再使用start()启动。语法:class threading.Thread
- 大家好,今天跟大家分享一个用Python实现的学生学籍管理系统:该代码主体由五个函数组成:1.add_stu() 添加2.del_stu()
- 本文介绍基于Python语言,实现对多个不同Excel文件进行数据读取与平均值计算的方法。首先,让我们来看一下具体需求:目前有一个文件夹,其
- 这篇论坛文章着重介绍了Access数据库出现0x80004005问题的解决方法,更多内容请参考下文:项目做了三个月了,终于也差不多完成了,昨
- 前言最近在搜寻资料时,发现了一则10年前的新闻:二维码将成线上线下关键入口。从今天的移动互联网来看,支付收款码/健康码等等与我们息息相关,二
- 直接给出例子说明:cs = conn.cursor()img_ids = [1,2,3]sql = "select img_url
- 这个使用起来很简单,以前需要的时候在网上找的,用了感觉还不错,具体的看演示就明白了。,这个可以保留你文章中的html标记,需要你修改的就是下
- 1.简介(torch.nn下的)卷积层主要使用的有3类,用于处理不同维度的数据参数 Parameters:in_channels(int)
- 一 描述720. 词典中最长的单词 - 力扣(LeetCode) (leetcode-cn.com)给出一个字符串数组 words
- 理解新概念Python V2.2 中引入了迭代器的思想。唔,这并不十分正确;这种思想的“苗头”早已出现在较老的函数 xrange() 以及文
- ASP+javascript实现可显示和隐藏的树型菜单实例:<script language=&qu
- 本文较为详细的分析了php单一入口应用程序。分享给大家供大家参考。具体如下:什么是单一入口应用程序?在解释什么是单一入口应用程序之前,我们先