• (转)在asp.net 2.0中使用SqlBulkCopy类迁移数据


    我们经常要在一个表中将数据迁移到另一个表,当然,用的方法十分多了。在.net 2.0中,提供了一个sqlbulkcopy类,也可以实现如下的操作,下面简单介绍下。比如一个表如下
    CREATE TABLE Person3
    (

    PersonID int IDENTITY(1,1) PRIMARY KEY,
    Name nvarchar(200),
    Email nvarchar(200),
    Picture image

    )

    INSERT INTO Person3(Name,Email,Picture)
    SELECT Name,Email,Picture FROM Person

    假设person表已经存在了,则上面的语句可以往person3表中插入数据(在sql server 2005中执行)。现在我们使用下面的代码来实现
    string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

    SqlConnection myConnection = newSqlConnection(connectionString);

    SqlCommand myCommand = newSqlCommand("SELECT * FROM Person", myConnection);

    myConnection.Open();

    SqlDataReader dr = myCommand.ExecuteReader();

    SqlConnection myNewConnection = newSqlConnection(connectionString);

    myNewConnection.Open();

    SqlBulkCopy bulk = newSqlBulkCopy(myNewConnection);

    bulk.DestinationTableName = "[Person3]";

    try

    {

    bulk.WriteToServer(dr);

    }

    catch (Exception ex)

    {

    Response.Write(ex.Message);

    }

    finally

    {

    myNewConnection.Close();

    dr.Close();

    myConnection.Close();

    bulk.Close();

    }

      下面来解析下。首先,新建一个数据库连接,之后是很经典的代码了,从person表中拿出数据到datareader中去。之后,我们又新建立了个数据连接,之后,使用

    SqlBulkCopy bulk = newSqlBulkCopy(myNewConnection);

    bulk.DestinationTableName = "[Person3]";

    其中,将mynewconnection作为参数传到 sqlbulkcopy类的构造参数中去,并指定目标迁移的表名是person3.
       之后,再使用bulk.WriteToServer(dr);就可以迁移了。
        而上面的person表和person3的结构是完全相同的,那么如果结构不同的,怎么办呢?下面举例子说明,创建一个表person2
      CREATE TABLE Person2
    (
    PersonID int IDENTITY(1,1) PRIMARY KEY,
    FirstName nvarchar(200),
    LastName nvarchar(200),

    Email nvarchar(200),
    Picture image
    )
     如果我们按上面将person表迁移到person2表中去,将会出错,因为字段不同,而我们将采用下面的代码
    string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

    SqlConnection myConnection = newSqlConnection(connectionString);

    SqlCommand myCommand = newSqlCommand("SELECT * FROM Person", myConnection);

    myConnection.Open();

    SqlDataReader dr = myCommand.ExecuteReader();

    SqlConnection myNewConnection = newSqlConnection(connectionString);

    myNewConnection.Open();

    SqlBulkCopy bulk = newSqlBulkCopy(myNewConnection);

    bulk.DestinationTableName = "[Person2]";

    bulk.ColumnMappings.Add("Name", "LastName");

    bulk.ColumnMappings.Add("Email", "Email");

    bulk.ColumnMappings.Add("Picture", "Picture");

    try

    {

    bulk.WriteToServer(dr);

    }

    catch (Exception ex)

    {

    Response.Write(ex.Message);

    }

    finally

    {

    myNewConnection.Close();

    dr.Close();

    myConnection.Close();

    bulk.Close();

    }

      可以看到,这里使用bulk.ColumnMappings.Add(“。。。”,“。。。”)来强制规定,源目标字段和哪一个目标表的字段相匹配了。
       用sqlbulkcopy类,在数据多的情况下,性能是十分好的!!

  • 相关阅读:
    10 行 Python 代码,批量压缩图片 500 张,简直太强大了
    听说苏州是互联网的荒漠,真的吗?
    sum() 函数性能堪忧,列表降维有何良方?
    len(x) 击败 x.len(),从内置函数看 Python 的设计思想
    如何给列表降维?sum()函数的妙用
    Shell脚本关于循环的一些总结
    大技霸教你远程执行Linux脚本和命令
    老板对我说,你要是能找出公司里摸鱼的人,我就给你涨薪!于是我写了两个脚本……
    Linux 命令行下搜索工具大盘点,效率提高不止一倍!
    饿了么总监分享:我是如何完成从程序员到管理层的蜕变?
  • 原文地址:https://www.cnblogs.com/junzi2099/p/1890576.html
Copyright © 2020-2023  润新知