SqlBulkCopyOptions介绍
SqlBulkCopy位于位于命名空间System.Data.SqlClient下,主要功能是把其他数据源(数据行DataRow,数据表DataTable,数据读取器IDataReader等)的数据有效批量的导入到SQL Server表中的功能。
类似与 Microsoft SQL Server 包中名为 bcp 的命令行应用程序。
但是使用 SqlBulkCopy 类可以编写托管代码解决方案,性能上优于bcp命令行应用程序,更优于如Insert方式向SQL Server数据库插入大量数据。( SqlBulkCopy 相较于 Insert 语句而言有20~40倍性能提升)
因此SqlBulkCopy在应用到大批量数据的插入时很方便。
SqlBulkCopyOptions配置选项的说明与分析:
- Default 对所有选项使用默认值。
- KeepIdentity 保留源标识值。如果未指定,则由目标分配标识值。
- CheckConstraints 请在插入数据的同时检查约束。默认情况下,不检查约束。
- TableLock 在批量复制操作期间获取批量更新锁。如果未指定,则使用行锁。
- KeepNulls 保留目标表中的空值,而不管默认值的设置如何。如果未指定,则空值将由默认值替换
- FireTriggers 指定后,会导致服务器为插入到数据库中的行激发插入触发器。 默认情况下, 是不激发触发器的……
- UseInternalTransaction 如果已指定,则每一批批量复制操作将在事务中发生。 在一个事务中执行,要么都成功,要么都不成功
实现代码:
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,数据库,TableName,SqlBulkCopy,server,插入,sql,copy From: https://www.cnblogs.com/shaopang/p/17629664.html