利用MySqlBulkLoader生成csv文件,批量添加数据

Posted -xyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用MySqlBulkLoader生成csv文件,批量添加数据相关的知识,希望对你有一定的参考价值。

DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("YwQuaId", typeof(string));
dt.Columns.Add("CertiType", typeof(string));
dt.Columns.Add("CertiName", typeof(string));
dt.Columns.Add("CertiRemark", typeof(string));
dt.Columns.Add("Link", typeof(string));
dt.Columns.Add("FileId", typeof(string));
dt.TableName = "filedetail";
for (int i = 0; i < 50000; i++)
    
      dt.Rows.Add(new object[]  0, Guid.NewGuid().ToString(), "testCertType", "testCertiName", "testCertiRemark", "testLink", Guid.NewGuid().ToString() );
    

开始调用

DapperHelper.AddByBulk(dt); 

将DataTable数据写入excel文件,再从excel文件里导入数据到mysql数据库

        public static int AddByBulk(DataTable dt)
        
            int insertCount = 0;
            using (var conn = ConnectionFactory.MySqlConnection())
            
                    try
                    
                        var path = @"E:/Attdence/";  
                        string filename = string.Format("01.csv", path, dt.TableName);
                        Stopwatch sw = new Stopwatch();
                        sw.Start();
                        DataTableToCsv(dt, filename);
                        MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
                        
                            FieldTerminator = ",",
                            FieldQuotationCharacter = ‘"‘,
                            EscapeCharacter = ‘"‘,
                            LineTerminator = "\r\n",
                            FileName = filename,
                            NumberOfLinesToSkip = 0,
                            TableName = dt.TableName,
                        ;
                        bulk.Columns.AddRange(dt.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
                        insertCount = bulk.Load();
                        sw.Stop();
                        TimeSpan ts = sw.Elapsed;
                        Console.WriteLine(ts.TotalSeconds);
                    
                    catch (Exception ex)
                    
                       //异常处理
                    
               
            
            return insertCount;
        

  

        private static void DataTableToCsv(DataTable table,string fileName)
        
            //以半角逗号(即,)作分隔符,列为空也要表达其存在。
            //列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
            //列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
            StringBuilder sb = new StringBuilder();
            DataColumn colum;
            foreach (DataRow row in table.Rows)
            
                for (int i = 0; i < table.Columns.Count; i++)
                
                    colum = table.Columns[i];
                    if (i != 0) 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();
            
            File.WriteAllText(fileName, sb.ToString());
        

 

以上是关于利用MySqlBulkLoader生成csv文件,批量添加数据的主要内容,如果未能解决你的问题,请参考以下文章

MySqlBulkLoader 中文乱码

MySqlBulkLoader 使用 DataTable 而不是文件

批量插入数据, 将DataTable里的数据批量写入数据库的方法

利用curl 模拟多线程

Mysql的批量导入类 MySqlBulkLoader

MySqlBulkLoader后数据库出现0000-00-00 00:00:00数据问题