ADO.NET利用SqlBulkCopy在数据库间大批量快速复制数据

       在ASP.NET 2.0中提供了一个新的类SqlBulkCopy类,它在性能上的优势更超过了上面的方法,它可以通过让DataSet或是DataReader中大量的数据通过数据流直接进行装载,然后可以将这些记录添加到指定的数据表中。

  SqlBulkCopy类只有在SQL Server的表中写入数据,但在使用其它的数据库时,可以通过数据源来使用,SqlBulkCopy类主要包括一个实例方法WriteToServer,它用来把数据从一个数据源传输到另外一个数据源。WriteToServer的方法可以快速的写入DataRow数组数据,DataTable和DataReader。在实际开发的过程中,可以视情况而定,选择我们所喜欢的方法,我们看它使用的方法:

  WriteToServer(DataTable)写入数据表

  WriteToServer(DataRow)批次写入数据行

  WriteToServer(DataTable,DataRowState)按行状态写入数据库表

  WriteToServer(DataReader)写入DataReader对象

  在多数情况下,我们选择最好的方法是DataReader对象,因为DataReader是一个读取只向前和只读流的方式,所以它要比DataTable和DataRows更快,我们现在来看看下面的代码,它用来把数据从一张表中传输到另一张表中。

代码清单:

  string strConnection = ConfigurationManager.AppSettings["conStr"].ToString();//读取Web.config文件中的数据库连接字符串

  SqlConnection LSourceConn =new SqlConnection(strConnection);//数据的连接方式是SQL Server

  LSourceConn.Open();//打开数据库连接

  SqlCommand LMyCommand =new SqlCommand("Select * from MSreplication_options",LSourceConn);//通过命令来读取SQL语句

  SqlDataReader LMyReader =LMyCommand.ExecuteReader();//开始执和结果集,获取DataReader记录集

  //连接目标数据库连接,并且打开数据库连接方式,在此由于调用同一个数据库,连接字符串没有变

  SqlConnection LDestinationConn =new SqlConnection(strConnection);

  LDestinationConn.Open();

  //调用SqlBulkCopy类的方法

  SqlBulkCopy LBulkCopy =new SqlBulkCopy(LDestinationConn);

  //获取目标表的名称

  LBulkCopy.DestinationTableName ="destination";

  //写入DataReader对象

  LBulkCopy.WriteToServer(LMyReader);

  //关闭各个对象

  LMyReader.Close();

  LSourceconn.Close();

  LDestinationConn.Close();

  上例中,我们使用的是SQL Server 2005的master数据库,我们在使用SqlBulkCopy的时候,需要了解一下它的几个重要的属性:

  BatchSize:属性的整数值;或者如果未设置任何值,则为零。每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。

  BulkCopyTimeOu:超时之前操作完成所允许的秒数。如果操作超时,事务便不会提交,而且所有已复制的行都会从目标表中移除。

  ColumnMappings:返回 SqlBulkCopyColumnMapping 项的集合。列映射定义数据源中的列和目标表中的列之间的关系。如果数据源和目标表具有相同的列数,并且数据源中每个源列的序号位置匹配相应目标列的序号位置,则无需 ColumnMappings 集合。但是如果列计数不同,或序号位置不一致,则必须使用 ColumnMappings,以确保将数据复制到正确的列中。

  DestinationTableName:指定的目标表中。

  NotifyAfter:属性的整数值,或者如果未设置该属性,则为零。定义在生成通知事件之前要处理的行数。

  在ColumnMappings属性中,我们可以看到SqlBulkCopyColumnMapping 项,它主要是用来定义SqlBulkCopy实例的数据源中的列与该实例的目标表中的列之间的映射。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 6,020评论 0 9
  • ADO.NET数据库访问 访问数据源步骤: 1.创建连接2.发出数据请求3.执行命令4.处理5.关闭连接 发展阶段...
    有林带鱼卖吗阅读 6,950评论 0 0
  • 很多应用程序都需要与数据库交互。数据库是一个数据仓库,与文本文件和 XML 文件极其相似。可以想见,使用文件来存储...
    CarlDonitz阅读 336评论 0 1
  • 数据库 数据库(DB,Database)简单来说就是数据的仓库,现实世界中仓库中有排货架(表),货物会分门别类的存...
    JunChow520阅读 3,164评论 0 8
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 12,526评论 6 13

友情链接更多精彩内容