.net core 2.0 下,用C#自创实现MysqlHelper的ExecuteDataTable 功能[2017-10-30]
2017-10-30 13:04
507 查看
如何在.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;
/// <summary>
/// 作者:蔡延曦
/// 2017-10-30
/// </summary>
class MysqlHelpercyx
{
/// <summary>
/// 利用MysqlDataReader曲线构造并填充DataTable
/// </summary>
/// <param name="connectionString"></param>
/// <param name="sql"></param>
/// <returns></returns>
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;
}
}
目前(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;
/// <summary>
/// 作者:蔡延曦
/// 2017-10-30
/// </summary>
class MysqlHelpercyx
{
/// <summary>
/// 利用MysqlDataReader曲线构造并填充DataTable
/// </summary>
/// <param name="connectionString"></param>
/// <param name="sql"></param>
/// <returns></returns>
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;
}
}
相关文章推荐
- Asp.net 2.0 C#实现压缩/解压功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- .net 2.0 C#实现压缩/解压功能实现
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Asp.net 2.0 C#实现压缩/解压功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码)
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- C#实现操作MySql数据层类MysqlHelper实例
- 【greenplum】 获取表结构,实现类似mysql show create table 功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- 基于spring boot的mysql使用pagehelper实现分页功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Oracle如何实现类似MySQL的show create table,show index的功能
- 使用.net 2.0(c#)来实现一般的FTP功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- Vue2.0+ElementUi封装table组件实现分页功能
- Asp.net 2.0 C#实现压缩/解压功能 (示例代码下载)
- OpenXmlHelper,其于OpenXml SDK2.0写的帮助类,主要实现Excel的导出、导入的功能及具体的源码Demo
- Asp.net 2.0 C#实现压缩/解压功能
- Asp.net 2.0 C#实现压缩/解压功能 [转=向作者‘肖相’无私共享精神致敬]