將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...