mysql函数返回结构体_C#处理MySql多个返回集的方法

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

e66c4b50c35458d1466e0f5c5a04bac9.png

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

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

public Task FillAsync(DataTable dataTable, IDataReader dataReader);

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

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

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

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

///

/// 读取多个返回集,返回List

///

///

///

///

public List StroedGetTableList(string StoredName, List 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 dts = new List();

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#程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值