sqlbulkcopy 批量复制数据

曾经做过一个网站,某一页需要这样处理:
 
把两个表查询出的结果放在一个GridView中,然后从GridView中检索中日期相同的数据并计算.
 
当时的一个同事用了联接查询,但表联接的语句让我看了头疼,大概有五行,所以我自己去找了另一种方法,
我在数据库中新建了一个空表,设置好结构.然后把GridView中数据批量复制到这个空表中,然后从此表中
查询数据,不太繁琐,又容易理解.
 
 
在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用。在很多不同的场合都会执行这个操作,
包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据。
ASP.NET 2.0有一个SqlBulkCopy类,它可以帮助你从不同的数据源复制数据到SQL SERVER数据库。
本文示范SqlBulkCopy类的不同应用。

下面的代码的作用是把数据从源表复制到目的表。
private static void PerformBulkCopy()
{
  string connectionString =
@"Server=localhost;Database=Northwind;Trusted_Connection=true";
                      
  // 源
  using (SqlConnection sourceConnection = new SqlConnection(connectionString))
  {
    SqlCommand myCommand = new SqlCommand("SELECT * FROM Products_Archive",
sourceConnection);
    sourceConnection.Open();
    SqlDataReader reader = myCommand.ExecuteReader();
              
    // 目的
    using (SqlConnection destinationConnection = new
SqlConnection(connectionString))
    {
      // 打开连接
      destinationConnection.Open();
              
      using (SqlBulkCopy bulkCopy = new
SqlBulkCopy(destinationConnection.ConnectionString))
      {
        bulkCopy.BatchSize = 500;
    bulkCopy.NotifyAfter = 1000;
        bulkCopy.SqlRowsCopied += new
SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);
        bulkCopy.DestinationTableName = "Products_Latest";
        bulkCopy.WriteToServer(reader);                  
      }
    }
    reader.Close();               
              
  }        
}
假如你要从Products_Archive表中把所有的产品名称及其数量复制到Products_TopSelling表里。
private static void PerformBulkCopyDifferentSchema()
{
  string connectionString =
@"Server=localhost;Database=Northwind;Trusted_Connection=true";
  DataTable sourceData = new DataTable();
  // 源
  using (SqlConnection sourceConnection = new SqlConnection(connectionString))
  {
    SqlCommand myCommand = new SqlCommand("SELECT TOP 5 * FROM
Products_Archive", sourceConnection);
    sourceConnection.Open();
    SqlDataReader reader = myCommand.ExecuteReader();
    // 目的
    using (SqlConnection destinationConnection = new
SqlConnection(connectionString))
    {
      // 打开连接
      destinationConnection.Open();
      using (SqlBulkCopy bulkCopy = new
SqlBulkCopy(destinationConnection.ConnectionString))
      {
        bulkCopy.ColumnMappings.Add("ProductID", "ProductID");
        bulkCopy.ColumnMappings.Add("ProductName", "Name");
        bulkCopy.ColumnMappings.Add("QuantityPerUnit", "Quantity");
        bulkCopy.DestinationTableName = "Products_TopSelling";
        bulkCopy.WriteToServer(reader);
      }
    }
    reader.Close();
  }
}

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21022866/viewspace-566834/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21022866/viewspace-566834/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值