SQL Server SqBbulkCopy 批量数据插入
SqlBulkCopy介绍
SqlBulkCopy位于位于命名空间System.Data.SqlClient下,主要功能是把其他数据源)的数据有效批量的导入到SQL Server表中的功能。
(数据源不限于 SQL Server;可以使用任何数据源,只要数据可以加载到 DataTable 实例或使用IDataReader 实例读取即可)
类似与 Microsoft SQL Server 包中名为 bcp 的命令行应用程序。
但是使用 SqlBulkCopy 类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQL Server数据库插入大量数据。( SqlBulkCopy 相较于 Insert 语句而言有20~40倍性能提升)
因此SqlBulkCopy在应用到大批量数据的插入时很方便。
SqlBulkCopy实现原理
通过DataTable存储数据并批量导入到数据库
SqlBulkCopy配置选项的说明与分析:
- Default 对所有选项使用默认值。
- KeepIdentity 保留源标识值。如果未指定,则由目标分配标识值。
- CheckConstraints 请在插入数据的同时检查约束。默认情况下,不检查约束。
- TableLock 在批量复制操作期间获取批量更新锁。如果未指定,则使用行锁。
- KeepNulls 保留目标表中的空值,而不管默认值的设置如何。如果未指定,则空值将由默认值替换
- FireTriggers 指定后,会导致服务器为插入到数据库中的行激发插入触发器。 默认情况下, 是不激发触发器的……
- UseInternalTransaction 如果已指定,则每一批批量复制操作将在事务中发生。 在一个事务中执行,要么都成功,要么都不成功
实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public static bool ExecuteSqlTranBulkCopy(DataTable TableName) { using (SqlConnection conn = new SqlConnection( "数据库连接地址" )) { conn.Open(); var copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.KeepIdentity, trans); try { copy.DestinationTableName = TableName; //对应的表名 copy.BatchSize = TableName.Rows.Count; //对应的列数 foreach (DataColumn item in TableName.Columns) //循环所需的列名 { copy.ColumnMappings.Add(item.ColumnName, item.ColumnName); //来源列,目标列 } copy.BulkCopyTimeout = 12000; copy.WriteToServer(TableName); //将数据写入目标表 } catch (Exception ex) { throw new Exception(TableName + "---" + ex); } finally { copy.Close(); } } |
备注:
sqlBulkCopy.DestinationTableName:>指定数据库表名
sqlBulkCopy.BatchSize-:指定数据库表的列数
sqlBulkCopy.ColumnMappings.Add-:设置SqlBulkCopy对象的列映射,将源表的列映射到目标表的列
注意事项
- 构建的DataTable要跟数据库表完全一致,包含自增列,排除NotMapped
- 构建DataColumn时列名要跟表一致,类型要传实际类型,不能不传或者传object
不要总是说的很多,却做得很少!
要明白'生于忧患,死于安乐'!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix