業務中經常會遇到批量匯入資料庫的操作,今天總結一下方法.
本文利用三層的架構的思想。將整個業務分成三部分,分別是介面,業務和資料處理。
先介紹第一種方法:
即先將excel**的內容轉化到datatable中,然後再將datatable匯入到sqlserver資料庫.
下面看乙個小demo
介面上用到的控制項是fileupload和button
protected void btnimport_click(object sender, eventargs e)
獲得檔案的副檔名
string fileext = system.io.path.getextension(fupimport.filename).tostring().tolower();
if (fileext == ".xls" || fileext == ".xlsx")
}else
if (system.io.file.exists(path))
else
}
邏輯層的主要任務是將介面傳過來的excel轉化到datatable中,並將datatable傳給dal層處理.因為讀取excel的操作不是針對的sql,而是用的oledb,所以放到了邏輯層.
/// /// 將坐在路徑的excel中的內容寫入到datatable中
///
/// 需要匯入的excel的路徑
/// 返回true 或false
public bool exceltodatatable(string strpath)
$]", strsheetname); 這是一種方法
//string strexcel = "select * from [" + sheetname + "]";
string strexcel = "select * from [sheet1$]";
//定義存放的資料表
dataset ds = new dataset();
//連線資料來源
oledbdataadapter adapter = new oledbdataadapter(strexcel, objconn);
//將excel表中內容填入ds中
adapter.fill(ds, sheetname);
//呼叫d層方法
return new dal().batchinsertdata("user_info", ds.tables[sheetname]);
}catch (sqlexception ex)
finally
}
d層,具體處理,將得到的datatable批量匯入到sql中
/// /// 將傳過來的datatable匯入到sql
///
/// 要匯入的sql資料庫表名
/// 待匯入的資料表
///
public bool batchinsertdata(string strtablename, datatable dt)
//匯入
sqlbulk.writetoserver(dt);
//匯入成功
blnresult = true;
}catch (exception)
finally
return blnresult;
}
這樣通過兩次呼叫,excel就可以順利匯入資料庫了,這種方法必須是資料庫字段》=excel表的字段,而且匯入時是預設從左到右字段一一對應,如果不需要匯入和資料庫相等的字段,且字段不連續,可以用陣列進行欄位的控制.
在資料庫進行對映時的**如下,其他**相同,不再贅述.
int intsqlfeild = ;
for (int i = 0; i < dt.columns.count; i++)
通過這種方式可以將excel表的資料和資料庫靈活繫結.但相對來說**較多.
ps:由於本文著重實現功能,這個demo的復用性可能不好,如果工程中很多表,很多資料庫中需要用到,可以進行重構,將關於表和資料庫的內容提取出來,寫成要傳的引數或者配置檔案.b層和d層的方法也可以更細的拆分.
c 中高效的excel匯入sqlserver的方法
將oledb讀取的excel資料快速插入的sqlserver中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用 bcp,也就是system.data.sqlclient.sqlbulkcopy 類來實現。不但速度快,而且 簡單,下面測試 匯入乙個6萬多條資料的sheet...
c 中高效的excel匯入sqlserver的方法
將oledb讀取的excel資料快速插入的sqlserver中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是system.data.sqlclient.sqlbulkcopy 類來實現。不但速度快,而且 簡單,下面測試 匯入乙個6萬多條資料的sheet,...
c 中高效的excel匯入sqlserver的方法
將oledb讀取的excel資料快速插入的sqlserver中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是system.data.sqlclient.sqlbulkcopy 類來實現。不但速度快,而且 簡單,下面測試 匯入乙個6萬多條資料的sheet,...