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类

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

现在多了很多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#,MySql
0
投稿

猜你喜欢

  • 浅谈pycharm使用及设置方法

    2023-12-18 21:17:47
  • 一个滑动展示的小代码

    2011-07-01 12:58:05
  • Python实现Opencv cv2.Canny()边缘检测

    2022-12-01 13:26:37
  • Pytorch使用shuffle打乱数据的操作

    2021-10-03 08:33:31
  • python 调试器pdb的简单使用

    2023-08-03 19:13:20
  • Python迭代和迭代器详解

    2023-11-20 08:52:28
  • SQL Server中索引使用及维护

    2008-11-25 11:13:00
  • Python如何一行输入多个数,并存入列表

    2023-09-27 19:14:56
  • jquery加载页面的方法(页面加载完成就执行)

    2024-04-23 09:10:11
  • selenium自动化测试简单准备

    2023-02-07 13:04:12
  • php动态函数调用方法

    2023-11-15 00:18:30
  • WebSocket部署到服务器出现连接失败问题的分析与解决

    2023-08-15 22:43:21
  • Pygame游戏开发之太空射击实战添加图形篇

    2022-11-06 07:13:29
  • 详解JS 比较两个Json对象的值是否相等的实例

    2024-04-29 13:35:36
  • Python lxml模块安装教程

    2021-08-26 22:23:43
  • Python 语句的表达式和缩进

    2023-11-26 18:28:24
  • flask项目集成swagger的方法

    2022-08-04 09:00:48
  • Python实现钉钉/企业微信自动打卡的示例代码

    2022-02-18 21:54:02
  • pytorch中使用cuda扩展的实现示例

    2021-02-17 23:46:55
  • 在ASP中使用SQL语句之9:表单操作

    2007-08-11 13:18:00
  • asp之家 网络编程 m.aspxhome.com