在asp.net 2.0中使用SqlBulkCopy类迁移数据[转]
生活随笔
收集整理的這篇文章主要介紹了
在asp.net 2.0中使用SqlBulkCopy类迁移数据[转]
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們經(jīng)常要在一個(gè)表中將數(shù)據(jù)遷移到另一個(gè)表,當(dāng)然,用的方法十分多了。在.net 2.0中,提供了一個(gè)sqlbulkcopy類,也可以實(shí)現(xiàn)如下的操作,下面簡(jiǎn)單介紹下。比如一個(gè)表如下
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
假設(shè)person表已經(jīng)存在了,則上面的語(yǔ)句可以往person3表中插入數(shù)據(jù)(在sql server 2005中執(zhí)行)。現(xiàn)在我們使用下面的代碼來(lái)實(shí)現(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();
}
下面來(lái)解析下。首先,新建一個(gè)數(shù)據(jù)庫(kù)連接,之后是很經(jīng)典的代碼了,從person表中拿出數(shù)據(jù),當(dāng)?shù)絛atareader中去。之后,我們又新建立了個(gè)數(shù)據(jù)連接,之后,使用
SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);
bulk.DestinationTableName = "[Person3]";
其中,將mynewconnection作為參數(shù)傳到 sqlbulkcopy類的構(gòu)造參數(shù)中去,并指定目標(biāo)遷移的表名是person3.
之后,再使用bulk.WriteToServer(dr);就可以遷移了。
而上面的person表和person3的結(jié)構(gòu)是完全相同的,那么如果結(jié)構(gòu)不同的,怎么辦呢?下面舉例子說(shuō)明,創(chuàng)建一個(gè)表person2
CREATE TABLE Person2
(
PersonID int IDENTITY(1,1) PRIMARY KEY,
FirstName nvarchar(200),
LastName nvarchar(200),
Email nvarchar(200),
Picture image
)
如果我們按上面將person表遷移到person2表中去,將會(huì)出錯(cuò),因?yàn)樽侄尾煌?#xff0c;而我們將采用下面的代碼
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(“。。。”,“。。。”)來(lái)強(qiáng)制規(guī)定,源目標(biāo)字段和哪一個(gè)目標(biāo)表的字段相匹配了。
據(jù)說(shuō)用sqlbulkcopy類,在數(shù)據(jù)多的情況下,性能是十分好的,呵呵。
posted on 2005-08-29 19:22 jackyrong的世界 閱讀(579) 評(píng)論(1) 編輯 收藏 引用 收藏至365Key 所屬分類: .NET
Feedback
# re: 在asp.net 2.0中使用SqlBulkCopy類遷移數(shù)據(jù) 2006-06-13 16:39 antony.net
寫的很明白,但我有一個(gè)問題,你的PersonID 是自增列吧,你用SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);
那么導(dǎo)數(shù)據(jù)沒有問題,PersonID 會(huì)自增,但你用這個(gè):SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection, SqlBulkCopyOptions.KeepIdentity+ SqlBulkCopyOptions.UseInternalTransaction)也就是放在一個(gè)事務(wù)里,就有主鍵沖突的問題。不知道你有沒有遇到過(guò)這個(gè)問題。我覺得很奇怪的哦。你有什么看法?
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
假設(shè)person表已經(jīng)存在了,則上面的語(yǔ)句可以往person3表中插入數(shù)據(jù)(在sql server 2005中執(zhí)行)。現(xiàn)在我們使用下面的代碼來(lái)實(shí)現(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();
}
下面來(lái)解析下。首先,新建一個(gè)數(shù)據(jù)庫(kù)連接,之后是很經(jīng)典的代碼了,從person表中拿出數(shù)據(jù),當(dāng)?shù)絛atareader中去。之后,我們又新建立了個(gè)數(shù)據(jù)連接,之后,使用
SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);
bulk.DestinationTableName = "[Person3]";
其中,將mynewconnection作為參數(shù)傳到 sqlbulkcopy類的構(gòu)造參數(shù)中去,并指定目標(biāo)遷移的表名是person3.
之后,再使用bulk.WriteToServer(dr);就可以遷移了。
而上面的person表和person3的結(jié)構(gòu)是完全相同的,那么如果結(jié)構(gòu)不同的,怎么辦呢?下面舉例子說(shuō)明,創(chuàng)建一個(gè)表person2
CREATE TABLE Person2
(
PersonID int IDENTITY(1,1) PRIMARY KEY,
FirstName nvarchar(200),
LastName nvarchar(200),
Email nvarchar(200),
Picture image
)
如果我們按上面將person表遷移到person2表中去,將會(huì)出錯(cuò),因?yàn)樽侄尾煌?#xff0c;而我們將采用下面的代碼
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(“。。。”,“。。。”)來(lái)強(qiáng)制規(guī)定,源目標(biāo)字段和哪一個(gè)目標(biāo)表的字段相匹配了。
據(jù)說(shuō)用sqlbulkcopy類,在數(shù)據(jù)多的情況下,性能是十分好的,呵呵。
posted on 2005-08-29 19:22 jackyrong的世界 閱讀(579) 評(píng)論(1) 編輯 收藏 引用 收藏至365Key 所屬分類: .NET
Feedback
# re: 在asp.net 2.0中使用SqlBulkCopy類遷移數(shù)據(jù) 2006-06-13 16:39 antony.net
寫的很明白,但我有一個(gè)問題,你的PersonID 是自增列吧,你用SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);
那么導(dǎo)數(shù)據(jù)沒有問題,PersonID 會(huì)自增,但你用這個(gè):SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection, SqlBulkCopyOptions.KeepIdentity+ SqlBulkCopyOptions.UseInternalTransaction)也就是放在一個(gè)事務(wù)里,就有主鍵沖突的問題。不知道你有沒有遇到過(guò)這個(gè)問題。我覺得很奇怪的哦。你有什么看法?
轉(zhuǎn)載于:https://www.cnblogs.com/tlnature/archive/2009/02/26/1398835.html
總結(jié)
以上是生活随笔為你收集整理的在asp.net 2.0中使用SqlBulkCopy类迁移数据[转]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql server存储过程中解决单引号
- 下一篇: 一步一步教你使用AgileEAS.NET