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