將execl裡的資料批量匯入資料庫

2022-07-09 06:06:10 字數 2461 閱讀 5385

本文將採用npoi外掛程式來讀取execl檔案裡的資料,將資料載入到記憶體中的datatable中

1

///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 }

view code

上面的方法中,把execl**第一列資料設為datatable的主鍵,同時使用dt.rows.find()方法去除重複項,主要是為了避免後面合併資料發生意外

載入到記憶體中的datatable之後,在業務層處理一下,把execl檔案裡的第一行資料(即datatable中的列名)修改成後面建立的臨時表的列名一一對應

1

public

static

async

task batchimport(system.data.datatable dt)

30 }

view code

下面開始建立臨時表,臨時表的名字命名必須以#開頭,結構要和execl檔案的一模一樣,字段不能多也不能少,否則匯入資料時某些資料丟失

1

///2

///建立臨時表

3///

4///

5///

6public

static

async task createtmeptable(sqlclient.sqlconnectioncon)

view code

成功建立臨時表之後,開始將datatable資料匯入臨時表

1

///2

///將execl資料批量匯入臨時表

3///

4///

5///

6///

7public

static

async task batchimport(string tablename,system.data.datatable dt, sqlclient.sqlconnectioncon)

view code

重點來了,重點來了,重點來了,如何將臨時表的資料寫到資料庫主表(主表結構與臨時表結構可相同可不相同)裡呢?請看**

1

///2

///合併臨時表資料到資料庫主表

3///

4///

5///

6public

static

async task combine(sqlclient.sqlconnectioncon)

view code

上面方法中使用了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.欄位);

合併完資料之後刪除臨時表(臨時表會在資料庫連線斷開時清除臨時表,這一步也可省)

1

///2

///刪除臨時表

3///

4///

5///

6public

static

async task droptemptable(sqlclient.sqlconnectioncon)

view code

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