SqlBulkCopy 批量插入数据库
话不多说直接上代码:

1 /// <summary> 2 /// 将批量数据导入Sqlserver 3 /// </summary> 4 /// <param name="sqldb">数据集</param> 5 public static bool SqlBulkCopy(DataTable sourceTable, string targetTableName) 6 { 7 using (SqlConnection conn = GetDefaultDB()) 8 { 9 try 10 { 11 if (conn.State != ConnectionState.Open) 12 conn.Open(); 13 if (sourceTable.Rows.Count > 0) 14 { 15 //数据批量导入sqlserver,创建实例 16 using (SqlBulkCopy sqlbulk = new SqlBulkCopy(conn)) 17 { 18 //目标数据库表名 19 sqlbulk.DestinationTableName = targetTableName; 20 //数据集字段索引与数据库字段索引映射 21 for (int i = 0; i < sourceTable.Columns.Count; i++) 22 { 23 sqlbulk.ColumnMappings.Add(i, i); 24 } 25 sqlbulk.BatchSize = 10000; 26 sqlbulk.BulkCopyTimeout = 90; 27 //导入 28 sqlbulk.WriteToServer(sourceTable); 29 sqlbulk.Close(); 30 } 31 } 32 return true; 33 } 34 catch 35 { 36 return false; 37 } 38 } 39 }
/// <summary> /// 将批量数据导入Sqlserver /// </summary> /// <param name="tempTable">数据源表</param> /// <param name="tableName">目标表</param> /// <param name="dic">列映射(key:数据源表字段,value:目标字段)</param> /// <returns></returns> public static bool SqlBulkCopy(DataTable tempTable, string tableName, IDictionary<string, string> dic) { using (SqlConnection conn = GetDefaultDB()) { try { if (conn.State != ConnectionState.Open) conn.Open(); if (tempTable.Rows.Count > 0) { //数据批量导入sqlserver,创建实例 using (SqlBulkCopy sqlbulk = new SqlBulkCopy(conn)) { //目标数据库表名 sqlbulk.DestinationTableName = tableName; //每一批次提交多少行到数据库,事务操作。(如果后面的批次数据异常,则该批次提交成功不会回滚,后面批次数据事务回滚插入不成功) //少量数据不建议使用 //sqlbulk.BatchSize = 2; //数据集字段索引与数据库字段索引映射 foreach (var item in dic) { sqlbulk.ColumnMappings.Add(item.Key, item.Value); } //导入 sqlbulk.WriteToServer(tempTable); sqlbulk.Close(); } } return true; } catch (Exception ex) { return false; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?