使用SqlBulkCopy进行数据大批量的迁移
2008-12-31 10:17:09 来源:WEB开发网 private DataTable SelectDataFromSource(String connectionString)
{
DataTable data = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand("SelectOrders", connection);
command.CommandType = CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
data.Load(reader);
}
return data;
}
接着,就执行数据复制的操作,此部分的代码为核心的部分,首先我们通过创建四个SqlBulkCopyColumnMapping对象,然后把两个数据库中的表之间的一一对应关系表述出来,然后设置好BatchSize及BulkCopyTimeout属性,然后返回 SqlBulkCopyColumnMapping 项的集合,接着定义好目标表的名称,以SqlRowsCopied事件处理程序,在定义在生成通知事件之前要处理的行数时,然后调用WriteToServer(DataTable) 方法写入数据表,结束数据的复制,如下: private void CopyDataToDestination(String connectionString, DataTable table)
{
SqlBulkCopyColumnMapping mapping1 =
new SqlBulkCopyColumnMapping("OrderID", "ID");
SqlBulkCopyColumnMapping mapping2 =
new SqlBulkCopyColumnMapping("ShipName", "Name");
SqlBulkCopyColumnMapping mapping3 =
new SqlBulkCopyColumnMapping("ShipAddress", "Address");
SqlBulkCopyColumnMapping mapping4 =
new SqlBulkCopyColumnMapping("ShipCity", "City");
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString);
bulkCopy.BatchSize = 100;
bulkCopy.BulkCopyTimeout = 5;
bulkCopy.ColumnMappings.Add(mapping1);
bulkCopy.ColumnMappings.Add(mapping2);
bulkCopy.ColumnMappings.Add(mapping3);
bulkCopy.ColumnMappings.Add(mapping4);
bulkCopy.DestinationTableName = "tblOrder";
bulkCopy.SqlRowsCopied +=
new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
bulkCopy.NotifyAfter = 200;
bulkCopy.WriteToServer(table);
}
在bulkCopy_SqlRowsCopied的处理中,我只简单的通过展现给用户一个友好的提示信息让你可以知道目前有多少行被复制成功。代码如下: private void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
{
MessageBox.Show
(String.Format("{0} Rows have been copied.", e.RowsCopied.ToString()));
}
这样,在平时的开发中,我们可以灵活的在ASP.NET中使用SqlBulkCopy帮助我们复制大量的数据之间的数据源和数据表,并改善应用程序的性能。
获取数据非常简单,它只是通过执行存储过程返回一个DataTable的查询结果集,如下:
Tags:使用 SqlBulkCopy 进行
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接