zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

mysqlc#方法 处理 多个 返回
2023-06-13 09:15:32 时间

本文实例讲述了C#处理MySql多个返回集的方法。分享给大家供大家参考。具体方法如下:

关于Mysql返回多个集java和Php的较多,但是C#的完整代码好像没见过,研究了一下做个封装以后用

做一个Mysql的简单分页查询,有两个返回集

Sql语句如下

复制代码代码如下:
SELECTCOUNT(*)from poster;
select
   t.PosterID,
   t.PostTime,
   t.Title
 fromapp_us_postertORDERBYt.PostTimedescLIMITstartPageNum,endPageNum;

这里MySql中返回是两个集,如何通过C#获取这两个值呢,需要用到MySqlDataAdapter和MySqlDataReader这两个类

查看MySqlDataAdapter类

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

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

复制代码代码如下:
publicTask<int>FillAsync(DataTabledataTable,IDataReaderdataReader);

如果想添加取消操作的可以用
复制代码代码如下:publicTask<int>FillAsync(DataTabledataTable,IDataReaderdataReader,CancellationTokencancellationToken)
MySqlDataReader是有一个NextResult的方法可以用来循环读取返回集,并返回bool类型

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

复制代码代码如下:///<summary>
///读取多个返回集,返回List<DataTable>
///</summary>
///<paramname="StoredName"></param>
///<paramname="Parameters"></param>
///<returns></returns>
publicList<DataTable>StroedGetTableList(stringStoredName,List<sqlparameters>Parameters)
{

   MySqlDataAdaptermysqldata=newMySqlDataAdapter();
   MySqlCommandsqlCommand=newMySqlCommand();
   sqlCommand.CommandText=StoredName;//存储过程名称
   sqlCommand.CommandType=CommandType.StoredProcedure;
   sqlCommand.Connection=conn;

   for(inti=0;i<Parameters.Count;i++)
   {
 sqlCommand.Parameters.AddWithValue(Parameters[i].name,Parameters[i].pvalue);
   }
   conn.Open();
   List<DataTable>dts=newList<DataTable>();
   MySqlDataReadermysqlreser=sqlCommand.ExecuteReader();//mysqlreader无构造函数
   boolre=true;
   System.Threading.CancellationToken_cts;//用于Cancel用的
   while(re)
   {
 DataTabledt=newDataTable();
 mysqldata.FillAsync(dt,mysqlreser).Wait(_cts);//等待线程完成
  dts.Add(dt);
 re=mysqlreser.NextResult();//取下一个结果集
     // Trace.WriteLine(dt.Rows.Count);       

   }
   conn.Close();
   returndts;
}

这里我用的阻塞主线程等待dt完成填充,不知道是否合适

复制代码代码如下:mysqldata.FillAsync(dt,mysqlreser).Wait(_cts);//等待线程完成
补充一下

conn是连接数据库用的连接实例MySqlConnection

sqlparameters是我声明的一个结构体,用来保存mysql的存储过程的输入参数

复制代码代码如下:publicstructsqlparameters
{
       publicstringname;//存储过程的输入字符名称
       publicobjectpvalue;//存储过程的输入变量
       publicsqlparameters(stringnames,objectpvalues)
       {
           name=names;
           pvalue=pvalues;
       }
}

希望本文所述对大家的C#程序设计有所帮助。