【数据库】MySqlBulkLoader——批量导入
来源:互联网 发布:originlab mac 破解 编辑:程序博客网 时间:2024/06/03 06:44
#region 批量操作 /// <summary> ///使用MySqlDataAdapter批量更新数据 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="table">数据表</param> public static void BatchUpdate( DataTable table) { MySqlConnection connection = GetConnection; MySqlCommand command = connection.CreateCommand(); command.CommandTimeout = CommandTimeOut; command.CommandType = CommandType.Text; MySqlDataAdapter adapter = new MySqlDataAdapter(command); MySqlCommandBuilder commandBulider = new MySqlCommandBuilder(adapter); commandBulider.ConflictOption = ConflictOption.OverwriteChanges; MySqlTransaction transaction = null; try { connection.Open(); transaction = connection.BeginTransaction(); //设置批量更新的每次处理条数 adapter.UpdateBatchSize = BatchSize; //设置事物 adapter.SelectCommand.Transaction = transaction; if (table.ExtendedProperties["SQL"] != null) { adapter.SelectCommand.CommandText = table.ExtendedProperties["SQL"].ToString(); } adapter.Update(table); transaction.Commit();/////提交事务 } catch (MySqlException ex) { if (transaction != null) transaction.Rollback(); throw ex; } finally { connection.Close(); connection.Dispose(); } } /// <summary> ///大批量数据插入,返回成功插入行数 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="table">数据表</param> /// <returns>返回成功插入行数</returns> public static int BulkInsert( DataTable table) { 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); 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, }; 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); return insertCount; } /// <summary> ///将DataTable转换为标准的CSV /// </summary> /// <param name="table">数据表</param> /// <returns>返回标准的CSV</returns> private static string DataTableToCsv(DataTable table) { //以半角逗号(即,)作分隔符,列为空也要表达其存在。 //列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。 //列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。 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(); } return sb.ToString(); } #endregion 批量操作
导入自增型数据:
自增列重新生成:SqlBulkCopy bc = new SqlBulkCopy(conn)
自增列保留原值:SqlBulkCopy bc = new SqlBulkCopy(conn,SqlBulkCopyOptions.KeepIdentity)
using(SqlBulkCopy sbc = new SqlBulkCopy(conn,SqlBulkCopyOptions.KeepIdentity)) { sbc.DestinationTableName = tableName; foreach (string col in colList) { sbc.ColumnMappings.Add(col, col); } sbc.BulkCopyTimeout = 0; sbc.WriteToServer(dt); }
0 0
- 【数据库】MySqlBulkLoader——批量导入
- C# 使用MySqlBulkLoader 批量导入数据到Mysql
- 规则引擎Visual Rules Solution—批量数据导入数据库
- 数据批量导入数据库
- Excel批量导入数据库
- excel批量导入数据库
- excel批量导入数据库
- C#---批量导入数据库
- 数据批量导入Oracle数据库
- 数据批量导入Oracle数据库
- 数据批量导入Oracle数据库
- 关于批量导入到数据库
- [转]sqlite数据库 批量导入
- weblogic批量导入数据库用户
- android数据库批量导入数据
- 跨数据库批量导入数据
- excel批量导入到数据库
- 批量导入数据到数据库
- java中关于File和io 的个人小结
- 基于PHP开发的外卖订餐网站(带源码)
- 快速排序
- 设置statusbar的颜色,适用于SDK4.4版本及以上版本
- 九度OJ 1078 二叉树遍历(已知前中序求后序)
- 【数据库】MySqlBulkLoader——批量导入
- 蓝桥杯 —— P1001 —— 大数相乘
- SAP HANA SQL字符串连接操作
- Oracle查询常用SQL
- 平常水题
- Linux命令大全(十)--
- linux下安装nginx
- 母牛的故事
- 流媒体技术笔记(DarwinStreamingServer相关)