快速业务通道

在asp.net 2.0中使用SqlBulkCopy类迁移数据

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

我们经常要在一个表中将数据迁移到另一个表,当然,用的方法十分多了。在.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 = new SqlConnection(connectionString);

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

myConnection.Open();

SqlDataReader dr = myCommand.ExecuteReader();

SqlConnection myNewConnection = new SqlConnection(connectionString);

myNewConnection.Open();

SqlBulkCopy bulk = new SqlBulkCopy(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 = new SqlBulkCopy(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 = new SqlConnection(connectionString);

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

myConnection.Open();

SqlDataReader dr = myCommand.ExecuteReader();

SqlConnection myNewConnection = new SqlConnection(connectionString);

myNewConnection.Open();

SqlBulkCopy bulk = new SqlBulkCopy(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类,在数据多的情况下,性能是十分好的,呵呵。


转载出处:http://blog.csdn.net/feng2375/archive/2008/12/29/3635104.aspx

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号