ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySqlBulkLoader 使用

2022-03-21 18:06:48  阅读:204  来源: 互联网

标签:colum tmpPath File 使用 MySqlBulkLoader sb csv row


 1 public bool TranBatchImportData(DataSet dataSet)
 2         {
 3             string fileServerPath = System.Web.Hosting.HostingEnvironment.MapPath("/");
 4             if (dataSet != null && dataSet.Tables.Count > 0)
 5             {
 6                 using (MySqlConnection conn = (MySqlConnection)GetSQLConnection())
 7                 {
 8                     if (conn.State != ConnectionState.Open)
 9                     {
10                         conn.Open();
11                     }
12                     foreach (DataTable dt in dataSet.Tables)
13                     {
14                         if (dt.Rows.Count == 0) continue;
15 
16                         string tmpPath = fileServerPath + "Uploads\\UpTemp";
17                         if (!Directory.Exists(tmpPath))
18                             Directory.CreateDirectory(tmpPath);
19                         tmpPath = Path.Combine(tmpPath, "Temp.csv");//csv文件临时目录
20                         if (File.Exists(tmpPath))
21                         {
22                             File.Delete(tmpPath);
23                         }
24                         string csv = DataTableToCsv(dt);
25                         File.WriteAllText(tmpPath, csv, new UTF8Encoding(false));
26 
27 
28                         int insertCount = 0;
29                         //MySqlTransaction tran = conn.BeginTransaction();
30                         MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
31                         {
32                             FieldTerminator = ",",
33                             FieldQuotationCharacter = '"',
34                             EscapeCharacter = '"',
35                             LineTerminator = Environment.NewLine, //"\r\n",
36                             FileName = tmpPath,
37                             //Local = true,
38                             NumberOfLinesToSkip = 0,
39                             TableName = dt.TableName,
40                             CharacterSet = "utf8"
41                         };
42                         try
43                         {
44                             bulk.Columns.AddRange(dt.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).ToList());
45                             insertCount = bulk.Load();
46                         }
47                         catch (MySqlException ex)
48                         {
49                             throw ex;
50                         }
51                         finally
52                         {
53                             if (File.Exists(tmpPath))
54                             {
55                                 File.Delete(tmpPath);
56                             }
57                         }
58 
59                     }
60                     return true;
61                 }
62             }
63 
64             return false;
65         }
View Code
 1 private static string DataTableToCsv(DataTable table)
 2         {
 3             //以半角逗号(即,)作分隔符,列为空也要表达其存在。  
 4             //列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。  
 5             //列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。  
 6             StringBuilder sb = new StringBuilder();
 7             DataColumn colum;
 8             foreach (DataRow row in table.Rows)
 9             {
10                 for (int i = 0; i < table.Columns.Count; i++)
11                 {
12                     colum = table.Columns[i];
13                     if (i != 0) sb.Append(",");
14                     if (colum.DataType == typeof(string) && row[colum].ToString().Contains(","))
15                     {
16                         sb.Append(row[colum].Equals(DBNull.Value) ? "NULL" : ("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\""));
17                     }
18                     else sb.Append(row[colum].Equals(DBNull.Value) ? "NULL" : row[colum].ToString());
19                 }
20                 sb.AppendLine();
21             }
22             return sb.ToString();
23         }
View Code

避坑

1、插入NULL到数据库时,使用“NULL”:sb.Append(row[colum].Equals(DBNull.Value) ? "NULL" : row[colum].ToString());

2、生成csv时,注意保存得格式,windows保存utf8时会保存成utf8-bom,保存时使用new UTF8Encoding(false):File.WriteAllText(tmpPath, csv, new UTF8Encoding(false));

3、设置MySqlBulkLoader.CharacterSet = "utf8"和数据库连接一致value="server=*********;database=********;uid=root;pwd=*********;charset='utf8';SslMode=****"

标签:colum,tmpPath,File,使用,MySqlBulkLoader,sb,csv,row
来源: https://www.cnblogs.com/liudd123/p/16035766.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有