C#处理MySql多个返回集的方法
C#处理MySql多个返回集的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了C#处理MySql多个返回集的方法。分享给大家供大家参考。具体方法如下:关于Mysql返回多个集java和Php的较多,但是C...

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

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

现在多了很多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#教程学习
热门C#教程学习
编程开发子分类