BCP 高效批量匯入

2021-09-05 19:18:44 字數 2084 閱讀 5266

將oledb讀取的excel資料快速插入的sqlserver中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是system.data.sqlclient.sqlbulkcopy 類來實現。不但速度快,而且**簡單,下面測試**匯入乙個6萬多條資料的sheet,包括讀取(全部讀取比較慢)在我的開發環境中只需要10秒左右,而真正的匯入過程只需要4.5秒。

using system;   

using system.data;   

using system.windows.forms;   

using system.data.oledb;   

private

void button1_click(object sender, eventargs e)   

}   

public

void transferdata(string excelfile, string sheetname, string connectionstring)   

$]", sheetname);   

mycommand = new oledbdataadapter(strexcel, strconn);   

mycommand.fill(ds, sheetname);   

//如果目標表不存在則建立

string strsql = string.format("if object_id('') is null create table (", sheetname);   

foreach (system.data.datacolumn c in ds.tables[0].columns)   

] varchar(255),", c.columnname);   

}   

strsql = strsql.trim(',') + ")";   

using (system.data.sqlclient.sqlconnection sqlconn = new system.data.sqlclient.sqlconnection(connectionstring))   

//用bcp匯入資料

using (system.data.sqlclient.sqlbulkcopy bcp = new system.data.sqlclient.sqlbulkcopy(connectionstring))   

}   

catch (exception ex)   

}   

//進度顯示

void bcp_sqlrowscopied(object sender, system.data.sqlclient.sqlrowscopiedeventargs e)   

}   

}   

獲取excel結構的方法,同理可以獲得access等資料庫的表結構資訊  getoledbschematable:

using

system;

namespace

...private

static

void

getexcelfileinfo(

string

path)

...);

foreach

(system.data.datarow drowcolumns 

intablecolumns.rows)

...console.readkey(

true

);jdbc中對應是:

rs=stmt.executequery(sql);

rsmd=rs.getmetadata();

for(int i=1;i<=rsmd.getcolumncount();i++)    

if(rsmd.getcolumntype(i)==4)//int型別

xmlcontent+=rsmd.getcolumnname(i)+"='"+rs.getint(rsmd.getcolumnname(i))+"' ";

else

xmlcontent+=rsmd.getcolumnname(i)+"='"+rs.getstring(rsmd.getcolumnname(i))+"' ";

BCP批量匯入匯出

1.批量匯入 bcp select from dbname.dbo.tablename queryout e test.sql s u sa p1 cexec master.xp cmdshell bcp dbname.dbo.tablename in e test.sql c t 2.許可權配置 ...

bcp匯入匯出

匯出 set cmd n bcp select from 庫.dbo.test1 n queryout d voc txt c u liyuepeng p liyuepeng exec master.xp cmdshell cmd set cmd n bcp 庫.dbo.test2 n in d v...

批量處理BCP匯入檔案到資料庫

今天接到個任務,csv檔案匯入到資料庫中。心想小case,結果一看驚呆了,有上萬個資料檔案,每個檔案中有幾萬條資料。效率問題是要考慮的首要因素。因為之前做過bcp匯入,腦海中立馬有了思路 迴圈所有檔案,執行bcp命令就可以了吧,決定把它做成個bat批處理。過程當中遇到的幾個問題,mark下 1.cs...