MySql MySqlBulkLoader批量导入数据(批导BulkInsert)|C/S开发框架

MySql MySqlBulkLoader批量导入数据(批导BulkInsert)
引言
MySql批导需要将数据存储到本地csv文件,然后使用MySqlBulkLoader导入数据。
BulkInsert批导方法
C# 全选
public override int BulkInsert<T>(List<T> entities, string tableName)
{
using (MySqlConnection conn = new MySqlConnection())
{
conn.ConnectionString = ConnectionString;
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
//开启本地文件开关,否则报错:https://www.cscode.net/archive/newdoc/605188819611653.html
var cmd = conn.CreateCommand();
cmd.CommandText = "set global local_infile = 1;";
cmd.ExecuteNonQuery();
if (String.IsNullOrWhiteSpace(tableName))
{
var tableAttribute = typeof(T).GetCustomAttributes(typeof(TableAttribute), true).FirstOrDefault();
if (tableAttribute != null)
tableName = ((TableAttribute)tableAttribute).Name;
else
tableName = typeof(T).Name;
}
int insertCount = 0;
string tmpPath = DateTime.Now.Ticks.ToString() + ".csv";
DataTable dt = entities.ToDataTable(tableName);
var csv = dt.ToCsv2();
//要与mysql的编码方式对象, 数据库要utf8, 表也一样
using (StreamWriter sw = new StreamWriter(tmpPath, false, UTF8Encoding.UTF8))
{
sw.Write(csv);
sw.Close();
}
MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
{
FieldTerminator = ",",
FieldQuotationCharacter = '"',
EscapeCharacter = '"',
LineTerminator = "\r\n",
NumberOfLinesToSkip = 0,
FileName = tmpPath,
TableName = tableName,
ConflictOption = MySqlBulkLoaderConflictOption.Replace,
Priority = MySqlBulkLoaderPriority.None,
Timeout = 1000 * 60 * 60,//milliseconds
CharacterSet = "utf8",
};
try
{
bulk.Columns.AddRange(dt.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
insertCount = bulk.Load();
}
catch (MySqlException ex)
{
conn.Close();
throw;
}
finally
{
if (File.Exists(tmpPath)) File.Delete(tmpPath);
}
return insertCount;
}
}
DataTable转csv文件
C# 全选
/// <summary>
/// 将DataTable转换为标准的CSV字符串(空值转换为NULL)
/// </summary>
/// <param name="dataTable"></param>
/// <param name="createTitle">是否添加标题</param>
/// <returns></returns>
public static string ToCsv2(this DataTable dataTable, bool createTitle = false)
{
var builder = new StringBuilder();
// 添加列标题
if (createTitle)
{
var columnTitles = string.Join(",", dataTable.Columns.Cast<DataColumn>().Select(column => $"\"{column.ColumnName}\""));
builder.AppendLine(columnTitles);
}
// 添加数据行
foreach (DataRow row in dataTable.Rows)
{
var fields = row.ItemArray.Select(field => field is DBNull ? "NULL" : $"\"{field.ToString().Replace("\"", "\"\"")}\"");
var line = string.Join(",", fields);
builder.AppendLine(line);
}
return builder.ToString();
}
CSFramework.EF数据库框架
CSFramework.EF是轻量级数据库底层框架,基于Entity Framework 实体框架强大功能封装而成。支持三种主流数据库,分别是SqlServer、Oracle、MySQL,支持国产数据库 - 达梦数据库,用户可扩展其他数据如 PostgreSQL,MongoDB,SQLLite等。
CSFramework.EF数据库框架提供IDatabase接口,里面定义了一组通用的接口方法,如增、删、改、查:Add<T>, Update<T>,Remove<T>,GetQuaryable<T>,支持LINQ,SQL脚本查询和操作,支持常用事务、BulkInsert批量插入等功能。
软件介绍:https://www.cscode.net/archive/csframework.ef/363596745297925.html

参考文档:
MySqlBulkLoader 导入csv Incorrect datetime value: '' for column |C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
MySqlConnector.MySqlException:“Loading local data is disabled|C/S开发框架
CSFramework框架数据库备份还原操作手册(MySql/Oracle/SqlServer/达梦)|C/S开发框架
Oracle:EFCore使用OracleBulkCopy实现批量导入数据|C/S开发框架
CSFrameworkV6软件开发框架 | MySql数据库测试报告|C/S开发框架
CSFrameworkV6软件开发平台主流数据库测试报告(SqlServer/MySql/Oracle/达梦)|C/S开发框架
MySql数据库备份、还原操作指南|C/S开发框架
CSFrameworkV6旗舰版 | MySql数据库笔记|C/S开发框架
MySql数据库连接字符串(ConnectionString)配置参数大全|C/S开发框架
CSFramework.EF数据库框架测试MySqlBulkLoader批量插入功能报错(解决方案)
CSFramework.WebApi支持多种常用数据库(Mssql/MySQL/Oracle)|C/S开发框架
DbFramework数据库实体类对象模型框架( 支持MsSQL,MySQL,Oracle三种数据库)|C/S开发框架
C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)-C/S开发框架
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案|C/S开发框架
CSFramework.EF数据库框架应用Schema测试多种数据库(.NET8+EFCore)|C/S开发框架
MySqlBulkLoader 导入csv Incorrect datetime value: '' for column |C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
MySqlConnector.MySqlException:“Loading local data is disabled|C/S开发框架
CSFramework框架数据库备份还原操作手册(MySql/Oracle/SqlServer/达梦)|C/S开发框架
Oracle:EFCore使用OracleBulkCopy实现批量导入数据|C/S开发框架
CSFrameworkV6软件开发框架 | MySql数据库测试报告|C/S开发框架
CSFrameworkV6软件开发平台主流数据库测试报告(SqlServer/MySql/Oracle/达梦)|C/S开发框架
MySql数据库备份、还原操作指南|C/S开发框架
CSFrameworkV6旗舰版 | MySql数据库笔记|C/S开发框架
MySql数据库连接字符串(ConnectionString)配置参数大全|C/S开发框架
CSFramework.EF数据库框架测试MySqlBulkLoader批量插入功能报错(解决方案)
CSFramework.WebApi支持多种常用数据库(Mssql/MySQL/Oracle)|C/S开发框架
DbFramework数据库实体类对象模型框架( 支持MsSQL,MySQL,Oracle三种数据库)|C/S开发框架
C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)-C/S开发框架
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案|C/S开发框架
CSFramework.EF数据库框架应用Schema测试多种数据库(.NET8+EFCore)|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服

