SqlBulk

来源:互联网 发布:文科博士 知乎 编辑:程序博客网 时间:2024/06/07 00:46

功效:批量高效插入数据,较之SQL语句的方式快至少25倍以上。

 

适用范围:SqlBulkCopy 类只能用于向 SQL Server 表中写入数据。 但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可以加载到 DataTable 实例或使用 IDataReader 实例读取即可。

 

原理:Microsoft SQL Server 包含名为 bcp 的常用命令行应用程序,用于快速将大文件批量复制到 SQL Server 数据库的表或视图中。 使用 SqlBulkCopy 类可以编写提供类似功能的托管代码解决方案。

使用 SqlBulkCopy 类可以执行下列操作:

  • 单次批量复制操作

  • 多次批量复制操作

  • 事务中的批量复制操作

注:

在使用 .NET Framework 1.1 版或更低版本时(不支持 SqlBulkCopy 类),可以使用 SqlCommand 对象执行 SQL Server Transact-SQL BULK INSERT 语句。

 

事例:

private static long SqlBulkCopyInsert() 

Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); 
DataTable dataTable = GetTableSchema(); 
string passportKey; 
for (int i = 0; i < count; i++) 

passportKey = Guid.NewGuid().ToString(); 
DataRow dataRow = dataTable.NewRow(); 
dataRow[0] = passportKey; 
dataTable.Rows.Add(dataRow); 

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connectionString); 
sqlBulkCopy.DestinationTableName = "Passport"; 
sqlBulkCopy.BatchSize = dataTable.Rows.Count; 
SqlConnection sqlConnection = new SqlConnection(connectionString); 
sqlConnection.Open(); 
if (dataTable!=null && dataTable.Rows.Count!=0) 

sqlBulkCopy.WriteToServer(dataTable); 

sqlBulkCopy.Close(); 
sqlConnection.Close(); 
stopwatch.Stop(); 
return stopwatch.ElapsedMilliseconds; 
}  

这是一个新建DataTable进行BulkCopy的事例,实际应用中,如果是从一个数据源得到另一个,使用数据适配器(DataAdapter)填充(Fill)的DataTable更方便一些,至少Schema就现成的了。