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;   
            }

  • 相关阅读:
    数据结构(一)之HelloWord
    关于玩QQ消息导入导出功能的感想!
    关于java.lang.IllegalStateException
    Error querying database. Cause: java.sql.SQLException: ORA-01745: 无效的主机/绑定变量名
    关于SVN更新时文件加锁的小结
    项目中和时间相关的要注意的地方
    项目开发中遇到的小问题及小规范
    世界各国的谷歌网址
    非常不错的IT进阶站点
    CSS 垂直居中
  • 原文地址:https://www.cnblogs.com/CityOfThousandFires/p/14306747.html
Copyright © 2011-2022 走看看