關於批量資料更新的問題 C 高效能

2021-09-01 13:36:31 字數 2067 閱讀 1748

當你批量運算元據的時候,常常會使用到update table1 from table2)的這種方式。這種方式是最簡潔的。

但當你從excel或者csv檔案更新海量資料時,再使用這種方法,那效能是不是好,字串拼接又何其之多,大資料是不是需要分組更新?

我需要使用到的類主要是sqlcommandbuilder。

///

準備更新的datatable新資料

///對應要更新的資料庫表名

///對應要更新的資料庫表的主鍵名

///對應要更新的列的列名集合

///需要在sql的where條件中限定的條件字串,可為空。

///每次往返處理的行數

///返回更新的行數

public

static

int update(datatable table, string tablename, string primarykeyname, string columnsname, string limitwhere,int

onceupdatenumber)

//為adapter定位目標表

sqlcommand cmd = new sqlcommand(string.format("

select * from where

", tablename,limitwhere), sqlconn, tran);

sqldataadapter da = new

sqldataadapter(cmd);

sqlcommandbuilder sqlcmdbuilder = new

sqlcommandbuilder(da);

da.acceptchangesduringupdate = false

;

string columnsupdatesql = ""

; sqlparameter paras = new

sqlparameter[columnsname.length];

//需要更新的列設定引數是,引數名為"@+列名"

for (int i = 0; i < columnsname.length; i++)

if (!string

.isnullorempty(columnsupdatesql))

//此處生成where條件語句

string limitsql = ("

[" + primarykeyname + "

]" + "

=@" +primarykeyname);

sqlcommand updatecmd = new sqlcommand(string.format("

update set where

", tablename, columnsupdatesql, limitsql));

//不修改源datatable

updatecmd.updatedrowsource =updaterowsource.none;

da.updatecommand =updatecmd;

da.updatecommand.parameters.addrange(paras);

da.updatecommand.parameters.add("@

" +primarykeyname, primarykeyname);

//每次往返處理的行數

da.updatebatchsize =onceupdatenumber;

result =da.update(ds,tablename);

ds.acceptchanges();

tran.commit();

}catch

finally

}return

result;

}

注: 此方法呼叫時要傳入的引數,包括主鍵名和列名都應與資料庫實際的名稱相對應.

你可以不傳入限定的where條件,如果傳入,只需傳入:name="chamy" or name="jundy",不需加入「where」等字元,不可以在此處傳入主鍵的限定。你只需要在主鍵名這個引數上傳入名稱即可。

批量更新資料問題

同事最近遇到乙個需要根據索引字段更新狀態資料的需求,而這個處理邏輯是迴圈查詢單條更新解決 主要 如下 簡寫 foreach array as v 主體思想是迴圈陣列,進行更新,這樣的話就是要一條條的update,這樣資料多了以後總感覺執行過於緩慢,會給資料庫帶來壓力,於是我查了查資料,找到了乙個批量...

mysql批量更新資料 效能優化

最近做的遊戲,上線後出了不少問題,所以我就經常去查資料庫資料,翻各種日誌等,但是在查詢的時候發現好蛋疼,有些地方的時間是寫 2016 08 11 20 13 02 這種格式,有些地方的時間是寫 1470917582000 這種格式,然後多張表資料進行對比的時候就很蛋疼,我得不停進行時間轉換,噁心得不...

C 寫日誌,高效能批量處理 Logger

當然了,可以使用 log4net 庫 但目前該功能需求不需要用到這麼強大的日誌管理 直接寫檔案記錄 所以就寫了乙個簡單的 這是半成品,還可以用,還有地方可以優化 但再優化前,可讀性比較好,我就上傳了 using system using system.text using system.io usi...