本文將採用npoi外掛程式來讀取execl檔案裡的資料,將資料載入到記憶體中的datatable中
1view code///2
///將excel轉換為datatable
3///
4///
5///
6///
7public
static system.data.datatable getexceldatatable(string
extension, system.io.stream stream)
24 dt.primarykey = new datacolumn[1] ;
25var rowcount = sheet.lastrownum + 1;26
for (var i = 1; i < rowcount; ++i)
34if (dt.rows.find(cells[0]) == null
) 37}38
return
dt;39 }
上面的方法中,把execl**第一列資料設為datatable的主鍵,同時使用dt.rows.find()方法去除重複項,主要是為了避免後面合併資料發生意外
載入到記憶體中的datatable之後,在業務層處理一下,把execl檔案裡的第一行資料(即datatable中的列名)修改成後面建立的臨時表的列名一一對應
1view codepublic
static
async
task batchimport(system.data.datatable dt)
30 }
下面開始建立臨時表,臨時表的名字命名必須以#開頭,結構要和execl檔案的一模一樣,字段不能多也不能少,否則匯入資料時某些資料丟失
1view code///2
///建立臨時表
3///
4///
5///
6public
static
async task createtmeptable(sqlclient.sqlconnectioncon)
成功建立臨時表之後,開始將datatable資料匯入臨時表
1view code///2
///將execl資料批量匯入臨時表
3///
4///
5///
6///
7public
static
async task batchimport(string tablename,system.data.datatable dt, sqlclient.sqlconnectioncon)
重點來了,重點來了,重點來了,如何將臨時表的資料寫到資料庫主表(主表結構與臨時表結構可相同可不相同)裡呢?請看**
1view code///2
///合併臨時表資料到資料庫主表
3///
4///
5///
6public
static
async task combine(sqlclient.sqlconnectioncon)
上面方法中使用了merge into和using,merge和using搭配用於特別是bi上資料統計和分析上 比如 要求子表中沒有的資料那麼父表中就要刪除對應的資料 保證子表和父表的資料對應 如果按照常規的做法是 跑個作業 然後通過游標/錶值函式/臨時表等等迴圈的獲取資料然後更新父表 這樣是很浪費效率的 這時merge派上用場了
merge的語法:
mergeinto主表 t
using#臨時表 d on t.關聯字段=d.關聯字段
whenmatched
then updateset t.欄位=d.欄位。。。。。。。。。。。
whennot matched --為not matched時 不能為update(沒有匹配成功 當然不能update了)
then insert(d欄位。。。)values(d.欄位);
合併完資料之後刪除臨時表(臨時表會在資料庫連線斷開時清除臨時表,這一步也可省)
1view code///2
///刪除臨時表
3///
4///
5///
6public
static
async task droptemptable(sqlclient.sqlconnectioncon)
sqlldr,將資料批量匯入Oracle資料庫
首先介紹一下sqlldr工具,它是由oracle提供,專本用於把文字資料匯入到oracle資料庫。它需要兩個檔案,乙個是文字資料檔案,另外乙個是ctl檔案。ctl檔案主要是配置一些引數,比如文字資料的分割符,首行或其他具體行需不需要跳過,匯入到哪張表,欄位都哪些,這些欄位都是什麼屬性等等。首先我設計...
將ACCESS資料批量匯入SQL SERVER
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 if object id sp inputaccesstosql isnotnull dropproc sp...
將excel資料匯入SqlServer資料庫
下面是我見到的最好的從excel匯入資料到sqlserver的最好方法,並給出了需要注意的地方。1 將excel裡的資料匯入已經存在的表中,命令如下 insert into t1 select from openrowset microsoft.jet.oledb.4.0 excel 5.0 hdr...