MySqlBulkLoader模式整表导入数据

2 篇文章 0 订阅

这个方法很快,但是有坑,string类型如果为空的话,用 DBNull.Value 赋值,row["student"] = DBNull.Value;

数值类型为空会报错。最好设置my.ini文件sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

  private int BulkLoaderData(DataTable table)
        {
            System.Diagnostics.Stopwatch sws = new System.Diagnostics.Stopwatch();
            sws.Start();
            string pConStr = "server=127.0.0.1;port=3306;user=root;password=123456; database=csf;";
            MySqlConnection GetConnection = new MySqlConnection(pConStr);
            if (string.IsNullOrEmpty(table.TableName)) throw new Exception("请给DataTable的TableName属性附上表名称");
            if (table.Rows.Count == 0) return 0;
            int insertCount = 0;
            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 = 0,
                        TableName = table.TableName,    //也是mysql内表的名                    
                        CharacterSet = "UTF8",
                    };
                    //  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);

            sws.Stop();
            TimeSpan ts2 = sws.Elapsed;
            //System.Windows.MessageBox.Show("耗时:" + ts2.TotalMilliseconds.ToString() + "毫秒");
            return insertCount;
        }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值