企业信息整合系统中经常会碰到异构数据源的情况,当将其它数据源的数据写入到SQL Server数据库中时,.NET 2.0提供的SqlBulkCopy类在这方面提供了相应解决方案。
在MSDN中对其解释如下:
Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
using System;
using System.Data;
using System.Data.SqlClient;
namespace Microsoft.Samples.SqlServer
{
class Program
{
public static void Main(string[] args){
using (SqlConnection connection = new SqlConnection( GetConnectionString() ) ){
connection.Open();
SqlCommand commandRowCount = new SqlCommand("SELECT COUNT(*) FROM BulkCopyDemoMatchingColumns;", connection);
long countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
Console.WriteLine("Starting row count = " + countStart);
SqlCommand commandSourceData = new SqlCommand("SELECT ProductID, Name, ProductNumber FROM Production.Product;", connection);
SqlDataReader reader = commandSourceData.ExecuteReader();
using (SqlBulkCopy bcp = new SqlBulkCopy(connection)){
bcp.DestinationTableName = "dbo.BulkCopyDemoMatchingColumns";
bcp.WriteToServer(reader);
}
long countEnd = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
Console.WriteLine("Ending row count = " + countEnd);
Console.WriteLine(countEnd - countStart + " rows were added.");
Console.WriteLine("Press Enter to finish.");
Console.ReadLine();
}
}
private static string GetConnectionString(){
return "Data Source=(local); Integrated Security=SSPI; Initial Catalog=AdventureWorks; MultipleActiveResultSets=True";
}
}
}


浙公网安备 33010602011771号