SqlBulkCopy是.NET框架中一个强大的工具,它允许开发者高效地将大量数据从一个数据源批量复制到SQL Server数据库中。这个功能强大的类是ODBC批量复制API的.NET实现,提供了一种比逐行插入更快速、更节省资源的数据迁移方式。在C#编程环境中,SqlBulkCopy被广泛用于大数据处理和迁移场景。

初始化SqlBulkCopy对象:创建SqlBulkCopy实例时,需要指定目标数据库的连接字符串。例如:


using (var bulkCopy = new SqlBulkCopy(\"Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;\"))

设置目标表名:通过DestinationTableName属性设定要插入数据的表名:


bulkCopy.DestinationTableName = \"MyTable\";

映射源数据和目标列:如果源数据和目标表的列不完全匹配,可以使用ColumnMappings属性来指定对应关系:


bulkCopy.ColumnMappings.Add(\"SourceColumn1\", \"TargetColumn1\");

bulkCopy.ColumnMappings.Add(\"SourceColumn2\", \"TargetColumn2\");

批量操作的配置:可以通过设置BatchSize属性来控制每次批量插入的数据行数,Timeout属性则定义了操作超时时间:


bulkCopy.BatchSize = 1000;

bulkCopy.Timeout = 30; // seconds

执行批量复制:调用WriteToServer方法将数据写入数据库。如果是从DataTable或IDataReader读取数据,可以使用重载版本:


bulkCopy.WriteToServer(myDataTable);

事务支持:SqlBulkCopy默认操作在自动提交事务中,但也可以与外部事务配合,提高数据一致性:


SqlTransaction transaction = connection.BeginTransaction();

bulkCopy.Transaction = transaction;

// ...执行WriteToServer

transaction.Commit();

事件处理:SqlBulkCopy还提供了RowsCopied事件,可以在数据复制过程中进行进度跟踪和错误处理。