c#关于Mysql MySqlBulkLoader 批量上传
有个list表有几万数据 用insert插入,速度跟蜗牛爬行, 几十个表,传起来可就需要时间了. 搜搜,发现有  MySqlBulkLoader 
这个人家mysql 的dll 里边已经提供了这个方法 .....
这是效率 5个字段的列

18760条 用时 346ms 速度可以
使用时注意事项, 程序里的datatable 当前来看必须是datatable的形式, 这个datatable 的列的名要 mysql 数据库的列的名一一对应,没有值的默认设置上mull ,反正datatable内没的列,在mysql里边没找到的话,会报错
上传时datatable 不要把列头标题那行给加上了. 至于顺序似乎没有要求, 程序里感觉是在查mysql里边的列头了,应该是做对应的....没关注顺序,反正传上去现在来看都对号入座了...
在用mysql 测试数据库时 新建数据表,我没设置编码方式, 结果出现了中文乱码情况, 最后查了一通才找到;4
/// <summary>
///大批量数据插入,返回成功插入行数
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="table">数据表</param>
/// <returns>返回成功插入行数</returns>
public int BulkInsert(DataTable table)
{
MySqlConnection GetConnection = new MySqlConnection(connectionString);
if (string.IsNullOrEmpty(table.TableName)) throw new Exception("请给DataTable的TableName属性附上表名称");
if (table.Rows.Count == ) return ;
int insertCount = ;
string tmpPath = Path.GetTempFileName();
string csv = DataTableToCsv(table);
StreamWriter sw = new StreamWriter(tmpPath, false,UTF8Encoding.UTF8); //要与mysql的编码方式对象, 数据库要utf8, 表也一样
sw.Write(csv);
sw.Close();
// File.WriteAllText(tmpPath, csv);
using (MySqlConnection conn = GetConnection)
{
MySqlTransaction tran = null;
try
{
conn.Open();
tran = conn.BeginTransaction();
MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
{
FieldTerminator = ",",
FieldQuotationCharacter = '"',
EscapeCharacter = '"',
LineTerminator = "\r\n",
FileName = tmpPath,
NumberOfLinesToSkip = ,
TableName = table.TableName, //也是mysql内表的名
};
// bulk.CharacterSet = "utf-8";
bulk.Columns.AddRange(table.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
insertCount = bulk.Load();
tran.Commit();
}
catch (MySqlException ex)
{
if (tran != null) tran.Rollback();
throw ex;
}
}
File.Delete(tmpPath);
return insertCount;
}
///将DataTable转换为标准的CSV
/// </summary>
/// <param name="table">数据表</param>
/// <returns>返回标准的CSV</returns>
private static string DataTableToCsv(DataTable table)
{
//以半角逗号(即,)作分隔符,列为空也要表达其存在。
//列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
//列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
StringBuilder sb = new StringBuilder();
DataColumn colum;
foreach (DataRow row in table.Rows)
{
for (int i = ; i < table.Columns.Count; i++)
{
colum = table.Columns[i];
if (i != ) sb.Append(",");
if (colum.DataType == typeof(string) && row[colum].ToString().Contains(","))
{
sb.Append("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\"");
}
else sb.Append(row[colum].ToString());
}
sb.AppendLine();
}
return sb.ToString();
}
c#关于Mysql MySqlBulkLoader 批量上传的更多相关文章
- 使用phpExcel批量上传excel表数据到mysql数据库中
		
/*批量上传数据*/ if(isset($_POST['submit']) && $_POST['submit']=='上传文件') { //导入类文件 require_once (& ...
 - Spring Boot2(十四):单文件上传/下载,文件批量上传
		
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
 - 带进度条的文件批量上传插件uploadify
		
有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...
 - Discuz模拟批量上传附件发帖
		
简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 模拟上传 discuz 附件逻辑 dz附件储存在 ...
 - Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙
		
前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...
 - 利用uploadify+asp.net 实现大文件批量上传。
		
前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...
 - uploadify文件批量上传
		
uploadify能够时间文件的批量上传,JS文件包下载地址,使用说明可以参考官网文档(http://www.uploadify.com/documentation/) 使用方法如下代码: $(&qu ...
 - 文件上传和下载(可批量上传)——Spring(三)
		
在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...
 - ux.plup.File plupload 集成 ux.plup.FileLis 批量上传预览
		
//plupload 集成 Ext.define('ux.plup.File', { extend: 'Ext.form.field.Text', xtype: 'plupFile', alias: ...
 
随机推荐
- react的注意点
			
1.import Form from '../pages/form/view' 与 import Form from '../pages/form/container'的区别: 前者只是引入view. ...
 - JAVA AES CBC 加密 解密
			
AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...
 - 解决scipy无法正确安装到virtualenv中的问题
			
一 . pip的基本操作 安装包: pip/pip3 install ***pkg 卸载包: pip/pip3 uninstall ***pkg 查看已经安装的某个包的信息: pip/pip3 sho ...
 - 【浅色】最强Win7 x64评测
			
[浅色]最强Win7 x64评测 [浅色]最强Win7 x86 & x64 | WINOS https://www.winos.me/archives/789.htmlESD671MB,安装后 ...
 - C# 自定义类动态追加属性
			
利用Dynamic,需要.net4.0以上的支持 var dg = rel.ResultDocuments.FirstOrDefault()["dg"].AsBsonArray.G ...
 - 如何将maven依赖项打进jar包,将一个完整的项目打进jar包
			
目的:我的目的就是将项目所有的文件,包括pom文件中依赖的jar包都打进一个jar包里面. 过程:将下面的内容放到pom文件里面. </dependencies> <build> ...
 - node-gyp和node-pre-gyp笔记
			
node-gyp大家都不陌生,先不做赘述. node-pre-gyp,install命令可以将存在网络上的作者根据不同平台预编译好的二进制文件下载下来 因为项目需要,博主需要本地编译,而不是去网上下载 ...
 - day37协程与线程套接字通讯
			
协程与线程套接字通讯基于多线程实现套接字服务端支持并发,服务端 from socket import * from threading import Thread def comunicate(con ...
 - 彻底解决COM端口被占用(在使用中)问题的办法
			
今天就遇到这个问题了串口调试的时候发现usb转串口使用的是COM8而串口调试助手里面只有COM1到4,我想去该COM口发现COM1到7都在使用中,找了好多办法都不行,后面在网上找到这篇解决办法的文章, ...
 - sqlserver to oracle
			
SELECT c.*, d .Organization_Name, d .ParentId, e.Roles_ID, e.Roles_Name FROM ( SELECT a.*, b.Organiz ...