.net core 2.0 下,用C#自创实现MysqlHelper的ExecuteDataTable 功能[2017-10-30]

如何在.net core 2.0环境下填充DataTable?

目前(2017-10-30),mysql 提供的.net core 2.0的 MySql.Data.MySqlClient.MysqlHelper 类尚未实现ExecuteDataTable()或ExecuteDataSet()等功能,MysqlDataReader.GetSchemaTable()也没有推出。自己试着用DataTable.Load(DataReader)这样的方法也告失败。

本人经过摸索,用MysqlDataReader读出一行数据后,获取到各个列的数据类型,然后据此构造DataTable,从而曲线实现了ExecuteDataTable()的功能。

注意:此技术路线的缺陷是,如果查询结果无数据,则无法获取到DataTable中各列的数据类型。

现贴出代码共享给大家。


using System;
using System.Data;
using MySql.Data.MySqlClient;


///


/// 作者:蔡延曦
/// 2017-10-30
///

class MysqlHelpercyx
{
    ///
    /// 利用MysqlDataReader曲线构造并填充DataTable
    ///

    ///
    ///
    ///
    public static DataTable ExecuteDataTable(string connectionString, string sql)
    {
        DataTable dt = new DataTable();
        MySqlDataReader dr = MySqlHelper.ExecuteReader(connectionString, sql);


        try
        {
            int fieldCount = dr.FieldCount;


            //获取schema并填充第一行数据
            if (dr.Read())
            {                
                    for (int i = 0; i < fieldCount; i++)
                {
                    string colName = dr.GetName(i);
                    dt.Columns.Add(colName, dr[i].GetType());
                }


                DataRow newrow = dt.NewRow();
                for (int i = 0; i < fieldCount; i++)
                {
                    newrow[i] = dr[i];
                }
                dt.Rows.Add(newrow);
            }
            
            //填充后续数据
            while (dr.Read())
            {
                DataRow newrow = dt.NewRow();
                for (int i = 0; i < fieldCount; i++)
                {
                    newrow[i] = dr[i];
                }
                dt.Rows.Add(newrow);
            }
            dt.AcceptChanges();
        }
        catch (Exception e1)
        {
            Console.WriteLine(e1.Message);
            //throw;
        }
        finally
        {
            dr.Close();
        }


        return dt;
    }
}

你可能感兴趣的:(.net core 2.0 下,用C#自创实现MysqlHelper的ExecuteDataTable 功能[2017-10-30])