使用SqlBulkCopy进行数据大批量的迁移
2008-12-31 10:17:09 来源:WEB开发网BatchSize:属性的整数值;或者如果未设置任何值,则为零。每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。
BulkCopyTimeOu:超时之前操作完成所允许的秒数。如果操作超时,事务便不会提交,而且所有已复制的行都会从目标表中移除。
ColumnMappings:返回 SqlBulkCopyColumnMapping 项的集合。列映射定义数据源中的列和目标表中的列之间的关系。如果数据源和目标表具有相同的列数,并且数据源中每个源列的序号位置匹配相应目标列的序号位置,则无需 ColumnMappings 集合。但是如果列计数不同,或序号位置不一致,则必须使用 ColumnMappings,以确保将数据复制到正确的列中。
DestinationTableName:指定的目标表中。
NotifyAfter:属性的整数值,或者如果未设置该属性,则为零。定义在生成通知事件之前要处理的行数。
在ColumnMappings属性中,我们可以看到SqlBulkCopyColumnMapping 项,它主要是用来定义SqlBulkCopy实例的数据源中的列与该实例的目标表中的列之间的映射。
结合着上面SqlBulkCopy的属性我们再来看一个综合的例子,此例中我们使用DataTable:
在本例中,我先自己建立一个数据库SqlBulkCopySample,然后建立一个表TblOrder,它主要是用来把Northwind数据库中的Orders表数据全导进来,所以它的表结构基本上和Orders一样,它们以应的关系如下:
ID (OrderID): int
Name (ShipName): nvarchar(40)
Address (ShipAddress): nvarchar(60)
City (ShipCity): nvarchar(15)
然后在Northwind数据中创建一个存储过程,如下:
CREATE PROCEDURE dbo.SelectOrders
AS
SELECT OrderID, ShipName, ShipAddress, ShipCity
FROM Orders
我们在页面中增加一个按钮的点击事件,当事件触发的时候,执行的代码如下: private void btnStart_Click(object sender, EventArgs e)
{
String sourceConnectionString =
"Data Source=127.0.0.1;Initial Catalog=Northwind;Integrated Security=True";
String destinationConnectionString =
"Data Source=127.0.0.1;;Initial Catalog=SqlBulkCopySample;Integrated Security=True";
DataTable data = SelectDataFromSource(sourceConnectionString);//获取数据
CopyDataToDestination(destinationConnectionString, data);//复制数据
}
获取数据非常简单,它只是通过执行存储过程返回一个DataTable的查询结果集,如下:
Tags:使用 SqlBulkCopy 进行
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接