SqlBulkCopy 也許你會用的上

2022-07-16 05:30:13 字數 2844 閱讀 1809

我們經常要在乙個表中將資料遷移到另乙個表,當然,用的方法十分多了。在.net 2.0中,提供了乙個sqlbulkcopy類,也可以實現如下的操作,下面簡單介紹下。比如乙個表如下

create tableperson3

(

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]";

trybulk.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 tableperson2

(

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]";

"name", "lastname");"email", "email");"picture", "picture");

trybulk.writetoserver(dr);

catch (exception ex)

response.write(ex.message);

finally

mynewconnection.close();

dr.close();

myconnection.close();

bulk.close();

心情不好看看這些話,也許你會找到答案

莎士比亞說 再好的東西,都有失去的一天。再深的記憶,也有淡忘的一天。再愛的人,也有遠走的一天。再美的夢,也有甦醒的一天。該放棄的決不挽留。2.幾公尺說 當你喜歡我的時候,我不喜歡你,當你愛上我的時候,我喜歡上你,當你離開我的時候,我卻愛上你,是你走得太快,還是我跟不上你的腳步,我們錯過了諾亞方舟,錯...

blog 你知道哪些? 也許對你有用

站點名稱 google自己的部落格 簡單介紹 google自己的部落格,非常容易申請gg廣告 站點名稱 和訊部落格 簡單介紹 財經 人士用得比較多,做ggad的話還是很合適的 站點名稱 中翼網部落格 站點名稱 歪酷部落格 站點名稱 中華網部落格 站點名稱 部落格龍 簡單介紹 比較簡單,裡面提供免費部...

摘錄 面試官也許會這樣問你

回答樣本一 我對工資沒有硬性要求,我相信貴公司在處理我的問題上會友善合理。我注重的是找對工作機會,所以只要條件公平,我則不會計較太多。回答樣本二 我受過系統的軟體程式設計的訓練,不需要進行大量的培訓,而且我本人也對程式設計特別感興趣。因此,我希望公司能根據我的情況和市場標準的水平,給我合理的薪水。回...