DataSet中的資料全部插入資料庫

2021-09-08 23:40:55 字數 1942 閱讀 8642

首先,用select語句查詢需要插入資料的表,用top 1查一行就夠了,但這個表中需要有一行資料,這個是為了給sqldataadapter生成表的架構用的。

1.string strsql = "select * from tableneedtoupdate";

2.sqldataadapter da = new sqldataadapter(strsql, sqlconn);

3.dataset ds = new dataset();

u%oyy-ec0

4.da.fill(ds);

+x*@ s$@-;

@%b2dn4n1g?;d p0

其次,用sqlcommandbuilder為sqldataadapter生成用於新增、刪除、更新的command。

1.sqlcommandbuilder cmdb = new sqlcommandbuilder(da);

2. = cmdb.getinsertcommand();

3. = cmdb.getupdatecommand();

4. = cmdb.getdeletecommand();

5.p(ppqcrd6@ m3m0

然後,如果根據要插入的資料生成新行。

1.foreach (datarow dr in dtnew.rows)

2.最後,用da.update(ds),即可將資料一次性插入資料庫中。

itpub個人空間v;|"j9v)e g'm

對於一些特殊情況,比如新插入資料跟原表中資料主鍵衝突的情況,則要多費點周折。正常情況下,這種情況應該是用更新來處理,而不是用插入。但有的時候,更新比較麻煩的時候,也可以用先刪除,後插入的方式來處理。

n)yb3y1z4jii k0

舉個例子,也就是我這一次處理的情況。我需要定時從乙個系統讀取資料寫入另外乙個系統。資料來源的資料是不定時更新的,沒有更新標識,每次讀取的時候,根本不知道哪些資料是新增的或是修改過的(當然也可以通過主鍵來進行判斷,但是比較麻煩)。這個時候,不能直接將這些資料寫入目的資料庫,因為可能會有主鍵重複的問題,所以需要先刪除目的資料庫中的資料,然後將新資料一次性全部寫入資料庫。

itpub個人空間qm jwr(`y

這個流程說起來非常清楚,問題在於如何刪除目的資料庫舊資料。我之前採取的方法是用table.rows.clear()方法:

1.ds.tables[0].rows.clear();

2.da.update(ds);

3.ds.acceptchanges();

這樣操作之後,插入新資料,會出現「主鍵重複」的錯誤。而只能採用table.rows.delete()方法:

1. for (int i = 0; i < ds.tables[0].rows.count; i++)

2.

5. da.update(ds);

6. ds.acceptchanges();

究其原因,是跟sqldataadapter的處理機制有關係的。sqldataadapter.update()是根據dataset中datarow的狀態標記來處理的,比如我們用dataset.tables[0].rows.add(drnew)來新增一行時,drnew會有乙個狀態added,執行sqldataadapter.update()時,會根據這個狀態對資料行進行處理,對應的,更新的資料行會有updated狀態,刪除的資料行會有deleted狀態。

itpub個人空間+c/o2`9z/

對於rows.clear()方法,是將資料從資料表中清除,它不會為被刪除的行新增標記,所以在執行sqldataadapter.update()時就不會首先將表中的資料刪除,從而導致主鍵重複的錯誤。而對於rows.delete(),它不會直接把資料行刪除,而是加上deleted標記,所以可以在update的時候正確的將資料刪除。

DataSet中的資料全部插入資料庫

首先,用select語句查詢需要插入資料的表,用top 1查一行就夠了,但這個表中需要有一行資料,這個是為了給sqldataadapter生成表的架構用的。1.string strsql select from tableneedtoupdate 2.sqldataadapter da new sq...

dataset中的資料關係

為dataset的多個表定義表間關係,並輸出主從表 建立dataset string constr server local uid sa pwd 123456 database 資訊中心科技資料管理資料庫 sqlconnection con new sqlconnection constr str...

Excel資料匯入至Dataset中

public static dataset exceltodataset string ppfilenameurl,string pptable microsoft.jet.oledb.4.0是microsoft jet引擎,這適用於2003版本,而在2007中,微軟對其旗下 access 與 ex...