信息交流、传播、提炼

nice to meet you

博客园 首页 新随笔 联系 订阅 管理

企业信息整合系统中经常会碰到异构数据源的情况,当将其它数据源的数据写入到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";
         }

    }

}
posted on 2008-03-05 11:11  seeyou  阅读(128)  评论(0)    收藏  举报