當你批量運算元據的時候,常常會使用到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...