zoukankan      html  css  js  c++  java
  • Mysql整表模式MySqlBulkLoader导入

    整表模式比逐行插入要快得多,通常数数十万的数据几秒就导入完成,需要配置数据库local_infile=1,用整表模式,DataTable的名字需与数据库中表名对应 

    DataTable dt_appointment_time_config_day.TableName = "appointment_time_config_day";
                BulkInsert(dt_appointment_time_config_day);
    public void BulkInsert(DataTable table)
            {
    
                string pConStr = "server=rm-8vb90a1oibt820no13o.mysql.zhangbei.rds.aliyuncs.com;user id=feitu;password=feitu!@#$2020; port=3306; persist security info=True;database=feitu;AllowLoadLocalInfile=true;";//local_infile=1;
                MySqlConnection GetConnection = new MySqlConnection(pConStr);
    
                if (string.IsNullOrEmpty(table.TableName))
                {
                    throw new Exception("请给DataTable的TableName属性附上表名称");
                }
    
                if (table.Rows.Count == 0)
                {
                    return;//return 0;
                }
    
                int insertCount = 0;
                string tmpPath = System.IO.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 = "
    ",
                            FileName = tmpPath,
                            NumberOfLinesToSkip = 0,
                            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)
                    {
                        AppLog.Write(ex.ToString(), LogMessageType.Error);
                        if (tran != null) tran.Rollback();
                        throw ex;
                    }
                }
                File.Delete(tmpPath);
                //return insertCount;   
    
            }

    public void BulkInsert(DataTable table)        {
                string pConStr = "server=rm-8vb90a1oibt820no13o.mysql.zhangbei.rds.aliyuncs.com;user id=feitu;password=feitu!@#$2020; port=3306; persist security info=True;database=feitu;AllowLoadLocalInfile=true;";//local_infile=1;            MySqlConnection GetConnection = new MySqlConnection(pConStr);
                if (string.IsNullOrEmpty(table.TableName))            {                throw new Exception("请给DataTable的TableName属性附上表名称");            }
                if (table.Rows.Count == 0)            {                return;//return 0;            }
                int insertCount = 0;            string tmpPath = System.IO.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 = " ",                        FileName = tmpPath,                        NumberOfLinesToSkip = 0,                        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)                {                    AppLog.Write(ex.ToString(), LogMessageType.Error);                    if (tran != null) tran.Rollback();                    throw ex;                }            }            File.Delete(tmpPath);            //return insertCount;   
            }

  • 相关阅读:
    mkconfig文件里的"cat << EOF >> config.h"
    (ARM v7)信号量、互斥体代码追踪
    (ARM v7)自旋锁、读写锁、顺序锁代码追踪
    mac 系统上安装navicat
    git2consul配置管理工具使用教程
    Spring Cloud Feign如何上传文件
    spring-cloud feign的多参数传递方案
    Consul下载安装及运行教程
    比SecureCRT更好用的工具MobaXterm下载安装使用教程
    Linux下RocketMQ下载安装教程
  • 原文地址:https://www.cnblogs.com/CityOfThousandFires/p/14306747.html
Copyright © 2011-2022 走看看