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类

现在多了很多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#程序设计有所帮助。

(0)

相关推荐

  • C#连接mysql的方法【基于vs2010】

    本文实例讲述了C#连接mysql的方法.分享给大家供大家参考,具体如下: 在vs2010中  工具->数据库连接   里要想连接到MySQL数据库,需要安装这样一个东西: MySql Connector: 1.首先安装 connector .下载地址:(http://www.mysql.com/downloads/connector/net/) 2.现在就可以了,打开vs2010试试吧! 安装完成后找到安装目录下(C:\Program Files\MySQL\MySQL Connector Ne

  • C#连接mariadb(MYSQL分支)代码示例分享

    首先配置好你的MariaDb,创建test数据库,在test里创建MyTable表,脚本如下(通过HeidiSQL导出的脚本): 复制代码 代码如下: -- ---------------------------------------------------------- 主机:                           172.16.40.153-- 服务器版本:                        5.5.5-10.0.4-MariaDB-1~wheezy-log -

  • C#连接mysql数据库完整实例

    本文实例讲述了C#连接mysql数据库的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Configuration; using MySql.Data.MySqlClient; /// <summary> /// TestDatebase 的摘要说明 /// </summary> public class TestDatebase { public TestDatebase() { // // TODO: 在此处添加构造函数逻辑

  • C# Mysql 查询 Rownum的解决方法

    Sql: 复制代码 代码如下: SELECT @rownum:=@rownum+1 AS rownum,a.order_id ,case when a.Ordered =1 then '已分单' end as Ordered,a.printed ,a.order_sn ,a.user_id ,b.user_name ,a.consignee ,a.tel ,a.mobile ,a.address ,a.pay_name ,a.goods_amount ,a.shipping_fee ,FROM_

  • C#中实现查找mysql的安装路径

    1.c#可以调用msyql的导入导出命令,但是需要先判断客户机是否安装了mysql,及其安装mysql的路径问题. 2.查询mysql安装路径的函数 复制代码 代码如下: private string GetMysqlPath()         {             string strPath = string.Empty;             string strsql = "select @@basedir as basePath from dual ";      

  • C#连接MySql数据库的方法

    1.要连接MySql数据库必须首先下载MySql官方的连接.net的文件,文件下载地址为http://dev.mysql.com/downloads/connector/net/6.6.html#downloads ,下载平台选择.Net&Mono,下载ZIP免安装版.2.解压缩刚才下载的mysql-connector-net-6.6.6-noinstall.zip文件,里面有几个版本选择,在这里我选V4, 选中这几个文件,然后添加到C#项目的引用中,然后就可以编写程序进行数据库的操作了. 3.

  • C#如何在海量数据下的高效读取写入MySQL

    前提 由于工作的原因,经常需要对海量数据进行处理,做的数据爬虫相关,动辄千万级别的数据,单表几十个G都是都是家常便饭.  主要开发语言是C#,数据库使用的是MySQL. 最常见的操作便是 select 读取数据,然后在C#中对数据进行处理, 完毕后再插入数据库中.  简而言之就 select -> process -> insert三个步骤. 对于数据量小的情况下(百万级别 or 几百兆)可能最多1个小时就处理完了.但是对于千万级数据可能几天,甚至更多. 那么问题来了,如何优化?? (数据库的

  • C# mysql 插入数据,中文乱码的解决方法

    有两种解决办法: 一种是在执行语句前面设置,如: 复制代码 代码如下: MySQLCommand mCommand = new MySQLCommand("set names gb2312", m_Connection); 另一种是直接加在连接字符串里,如: 复制代码 代码如下: <add name="connection" connectionString="server=127.0.0.1;UId=root;PassWord=root;Persi

  • C#中调用MySQL存储过程的方法

    本文实例讲述了C#中调用MySQL存储过程的方法.分享给大家供大家参考.具体如下: 这段代码演示在 C# 程序中调用 MySQL 的存储过程,没有返回值,没有参数传递. MySqlConnection myConnection; myConnection = new MySqlConnection(); myConnection.ConnectionString = "database="+database+";server="+ server+";use

  • C#操作mysql数据库的代码实例

    直接看代码 复制代码 代码如下: using System;using System.Configuration;using MySql.Data.MySqlClient;/// <summary>/// TestDatebase 的摘要说明/// </summary>public class TestDatebase{    public TestDatebase()    {        //        // TODO: 在此处添加构造函数逻辑        //   

  • C#实现操作MySql数据层类MysqlHelper实例

    本文实例讲述了C#实现操作MySql数据层类MysqlHelper.分享给大家供大家参考.具体如下: using System; using System.Data; using System.Configuration; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using MySql.Data; using MySql.Data.MySqlCli

  • C#连接操作 MySQL 数据库实例(使用官方驱动)

    MySQL 以其免费和足够的性能受到很大的青睐,当然对于国内小公司,甚至是大公司如果对版权看得薄,敢冒险的话,随便装个 SqlServer.DB2.Oracle 都行.对于 SqlServer 数据库,因其与 MS 是一家,自然在 .net 类库中有内建支持,假如 MySQL 就得找第三方的驱动了 -- .net 中多讲 Provider.在这里我也是作为一个预研专题,记录下 C# 连接 MySQL 的两种方法,分别使用 MySQL 官方的和 SourceForge 上一个开源的 MySQL 驱

随机推荐