在asp.net 2.0中使用SqlBulkCopy类迁移数据
在asp.net 2.0中使用SqlBulkCopy類遷移數(shù)據(jù)?(轉)
http://jackyrong.cnblogs.com/archive/2005/08/29/225521.html
我們經(jīng)常要在一個表中將數(shù)據(jù)遷移到另一個表,當然,用的方法十分多了。在.net 2.0中,提供了一個sqlbulkcopy類,也可以實現(xiàn)如下的操作,下面簡單介紹下。比如一個表如下
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表已經(jīng)存在了,則上面的語句可以往person3表中插入數(shù)據(jù)(在sql server 2005中執(zhí)行)。現(xiàn)在我們使用下面的代碼來實現(xiàn)
???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();
}
? 下面來解析下。首先,新建一個數(shù)據(jù)庫連接,之后是很經(jīng)典的代碼了,從person表中拿出數(shù)據(jù),當?shù)絛atareader中去。之后,我們又新建立了個數(shù)據(jù)連接,之后,使用
SqlBulkCopy?bulk =?new?SqlBulkCopy(myNewConnection);
bulk.DestinationTableName =?"[Person3]";
其中,將mynewconnection作為參數(shù)傳到 sqlbulkcopy類的構造參數(shù)中去,并指定目標遷移的表名是person3.
?? 之后,再使用bulk.WriteToServer(dr);就可以遷移了。
??? 而上面的person表和person3的結構是完全相同的,那么如果結構不同的,怎么辦呢?下面舉例子說明,創(chuàng)建一個表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(“。。。”,“。。?!?#xff09;來強制規(guī)定,源目標字段和哪一個目標表的字段相匹配了。
???據(jù)說用sqlbulkcopy類,在數(shù)據(jù)多的情況下,性能是十分好的,呵呵。
?
轉載于:https://www.cnblogs.com/gongyu/p/3938993.html
總結
以上是生活随笔為你收集整理的在asp.net 2.0中使用SqlBulkCopy类迁移数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 您需要计算机管理员权限,安装需要管理员权
- 下一篇: JQUERY解析XML IE8的兼容问题