C#实现大批量转移数据到SQl SERVER DB.

来源:互联网 发布:linux查询用户所属组 编辑:程序博客网 时间:2024/06/05 17:01

工作中接到一个需求.要将一个数据源中大量数据转移到另外一个SQL SERVER数据库的表中.

    这次的方案是开发一个应用程序做中转,应用程序先得到数据源的数据,再将得到的数据集插入到目标数据库中.

    得到数据集很简单,重点在于把本地数据集的数据转移到目标数据库里.我用了两种方法分别实现了这项功能.

    1. SQLCOMMAND逐条将数据集的ROW插入到目标表里.这种方式费时费力而且效率很低. 执行一次大概5000行的插入动作大概须要1分钟左右.

 

    2. 利用ADO.Net 2.0新提供的SqlBulkCopy类编写自己的大量复制过程. 这个类可完成以下操作:

          a) 单次大量复制操作.

          b) 多次大量复制操作.

          C)在事务中执行大量复制操作.

       具体的实例代码如下.

 

StringdistinctionTableName=”ReportTable”;

using(SqlBulkCopybcp=new SqlBulkCopy(tempConnector.OpenDataBase()))    

        //sqlConnecter是到目标数据库的连接.

            {

                bcp.DestinationTableName = distinctionTableName; // distinctionTableName是目标数据库的表名称. 

                bcp.BulkCopyTimeout = 120000;

                bcp.BatchSize = 10000;

                bcp.WriteToServer(tempDS.Tables["valueTable"]);//tempDS.Tables["valueTable]是已经得到的本地数据集.

                Debug.WriteLine("inserted" + bcp.NotifyAfter.ToString() + "rows"  );

                bcp.Close();

            }

        实现的代码很少而且执行效率非常高.同样执行一次5000行的插入动作只须不到5秒的时间.

       有关SqlBulkCopy类的详细定义.参考http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx

 

 

原创粉丝点击