最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足。三大数据库都有自己的大数据批量导入数据的方式,

MSSQL有SqlBulkCopy,MYSQL有MySqlBulkLoader,Oracle有OracleBulkCopy,对应各自的驱动。

一:生成csv文件

  1. public static class CSVEx
  2. {
  3. /// <summary>
  4. ///将DataTable转换为标准的CSV
  5. /// </summary>
  6. /// <param name="table">数据表</param>
  7. /// <returns>返回标准的CSV</returns>
  8. public static void ToCsv(this DataTable table)
  9. {
  10. //以半角逗号(即,)作分隔符,列为空也要表达其存在。
  11. //列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
  12. //列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
  13. StringBuilder sb = new StringBuilder();
  14. DataColumn colum;
  15. foreach (DataRow row in table.Rows)
  16. {
  17. for (int i = 0; i < table.Columns.Count; i++)
  18. {
  19. colum = table.Columns[i];
  20. if (i != 0) sb.Append(",");
  21. if (colum.DataType == typeof(string) && row[colum].ToString().Contains(","))
  22. {
  23. sb.Append("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\"");
  24. }
  25. else sb.Append(row[colum].ToString());
  26. }
  27. sb.AppendLine();
  28. }
  29.  
  30. File.WriteAllText(table.TableName + ".csv", sb.ToString());
  31. }
  32.  
  33. }

 二:批量导入数据

  1. public static class MySqlHelper
  2. {
  3. /// <summary>
  4. /// 批量导入
  5. /// </summary>
  6. /// <param name="_mySqlConnection"></param>
  7. /// <param name="dt"></param>
  8. /// <returns></returns>
  9. public static int BulkLoad(MySqlConnection _mySqlConnection, DataTable table)
  10. {
  11. var columns = table.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList();
  12. MySqlBulkLoader bulk = new MySqlBulkLoader(_mySqlConnection)
  13. {
  14. FieldTerminator = ",",
  15. FieldQuotationCharacter = '"',
  16. EscapeCharacter = '"',
  17. LineTerminator = "\r\n",
  18. FileName = table.TableName + ".csv",
  19. NumberOfLinesToSkip = 0,
  20. TableName = table.TableName,
  21.  
  22. };
  23.  
  24. bulk.Columns.AddRange(columns);
  25. return bulk.Load();
  26. }
  27. }

  

demo地址:https://github.com/xiaopotian1990/MySqlBulkLoaderDemo

.net core利用MySqlBulkLoader大数据批量导入MySQL的更多相关文章

  1. Java实现数据批量导入mysql数据库

    本文完全照搬别人的. 原文标题:Java实现数据批量导入数据库(优化速度-2种方法) 原文地址:https://blog.csdn.net/qy20115549/article/details/526 ...

  2. 分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

    1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...

  3. 大数据批量导入,解决办法,实践从定时从 sqlserver 批量同步数据到 mySql

    c#代码,批量导入数据代码 public class MySql_Target : ZFCommon.DataAccesser.Base.DABase { public MySql_Target() ...

  4. JAVA JDBC大数据量导入Mysql

    转自https://blog.csdn.net/q6834850/article/details/73726707?tdsourcetag=s_pctim_aiomsg 采用JDBC批处理(开启事务. ...

  5. [Django]数据批量导入

    前言:历经一个月的复习,考试终于结束了.这期间上班的时候有研究了Django网页制作过程中,如何将数据批量导入到数据库中. 这个过程真的是惨不忍睹,犯了很多的低级错误,这会在正文中说到的.再者导入数据 ...

  6. SQL Server中bcp命令的用法以及数据批量导入导出

    原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...

  7. 将Excle中的数据批量导入数据库

    namespace 将Excle中的数据批量导入数据库{    class Program    {        static void Main(string[] args)        { S ...

  8. 将execl里的数据批量导入数据库

    本文将采用NPOI插件来读取execl文件里的数据,将数据加载到内存中的DataTable中 /// <summary> /// 将Excel转换为DataTable /// </s ...

  9. mysql中把一个表的数据批量导入另一个表中

    mysql中把一个表的数据批量导入另一个表中   不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...

随机推荐

  1. 我的AOP那点事儿--2

    在<我的AOP那点事儿-1>中,从写死代码,到使用代理:从编程式AOP到声明式AOP.一切都朝着简单实用主义的方向在发展.沿着 Spring AOP 的方向,Rod Johnson(老罗) ...

  2. cratedb joins 原理(官方文档)

      JOINs are essential operations in relational databases. They create a link between rows based on c ...

  3. Tcl 和 Raft 发明人的软件设计哲学

    John Ousterhout(斯坦福大学教授,Tcl 语言.Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A ...

  4. oracle之 Got minus one from a read call 与 ORA-27154: post/wait create failed

    在部署应用的时候,有时候应用可以直接启动,但偶尔应用却无法启动,报错信息是: java.sql.SQLRecoverableException: IO Error: Got minus one fro ...

  5. 二、jdk命令之javah命令(C Header and Stub File Generator)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  6. Bootstrap-CL:导航栏

    ylbtech-Bootstrap-CL:导航栏 1.返回顶部 1. Bootstrap 导航栏 导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏在您的应用或网站中作为导航页 ...

  7. WebAPI认证与授权

    Web APi之认证(Authentication)及授权(Authorization)[一](十二) http://www.cnblogs.com/CreateMyself/p/4856133.ht ...

  8. 常见的JS和CSS问题

    事件冒泡 DOM的事件冒泡机制和WPF很相似,DOM事件机制包含冒泡和捕获两种,按照topmost element->innermost element方向传递事件被称为捕获方式,而从inner ...

  9. Python——截取web网页长图

    # -*- coding: utf8 -*-import timeimport xlrdfrom selenium import webdriver def read_excel(filename): ...

  10. 关于python-生成HTMLTestRunner测试报告

    一.HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展,它可以生成 HTML的 测试报告. 1.首先要下 HTMLTestRunner.py 文件,将下载的文件 ...