日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

批量更新

發(fā)布時(shí)間:2023/12/10 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 批量更新 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是最基本的批量更新。我使用的時(shí)候還不如逐條。

這好像還是官方的批量更新,反正不咋地。

///批量更新,效率太低,不如逐條更新static void Update(){SqlDataAdapter sda = new SqlDataAdapter("select PID,FMAddress,MeanValue1,StatsValue1,RatioValue1,StatsFlag1,MeanValue2,StatsValue2,RatioValue2,StatsFlag2 from tblRptDay where RptDate='2016-08' and RptDay='02'", SqlHelper.conStr);//sql語句:多了空格;字符串截取:起始位置出錯(cuò)DataTable dtx = new DataTable();sda.Fill(dtx);foreach (tblRptDay t in updateDayList){if (t.FMAddress != null){try{DataRow[] drs = dtx.Select("FMAddress ='" + t.FMAddress + "'");DataRow dr = drs[0];dr["MeanValue1"] = t.MeanValue1;dr["StatsValue1"] = t.StatsValue1;dr["RatioValue1"] = t.RatioValue1;dr["StatsFlag1"] = t.StatsFlag1;dr["MeanValue2"] = t.MeanValue2;dr["StatsValue2"] = t.StatsValue2;dr["RatioValue2"] = t.RatioValue2;dr["StatsFlag2"] = t.StatsFlag2;}catch (Exception){}}}SqlCommandBuilder scb = new SqlCommandBuilder(sda);//執(zhí)行更新sda.Update(dtx.GetChanges());//使DataTable保存更新dtx.AcceptChanges();}

  

?

下面是另一種更新,這是在表級(jí)別的更新。

先要獲取主鍵和要更新的字段。然后改吧改吧形成一個(gè)新的datatable。再一次性更新到數(shù)據(jù)庫。感覺和批量插入類似,批量插入要自己造一個(gè)datatable,然后一次性插入到數(shù)據(jù)庫。

1 //把數(shù)據(jù)庫的壓力轉(zhuǎn)移到內(nèi)存 2 static void Update() 3 { 4 5 SqlConnection conn = new SqlConnection(SqlHelper.conStr); 6 7 conn.Open(); 8 SqlDataAdapter sd = new SqlDataAdapter(); 9 SqlCommandBuilder sqlBulider = new SqlCommandBuilder(sd); 10 DataSet dataset = new DataSet(); 11 12 sd.SelectCommand = new SqlCommand("select PID,MeanValue1,StatsValue1,RatioValue1,StatsFlag1,MeanValue2,StatsValue2,RatioValue2,StatsFlag2,FMAddress from tblrptday_20170213 where RptDate='" + date.Substring(0, 7) + "' and RptDay='" + date.Substring(8, 2) + "'", conn); 13 //一定要加上主鍵 14 15 sd.Fill(dataset); 16 17 foreach (tblRptDay t in updateDayList) 18 { 19 if (t.FMAddress != null) 20 { 21 for (int i = 0; i < dataset.Tables[0].Rows.Count; i++) 22 { 23 if (t.FMAddress == (string)dataset.Tables[0].Rows[i]["FMAddress"]) 24 { 25 dataset.Tables[0].Rows[i].BeginEdit(); 26 dataset.Tables[0].Rows[i]["MeanValue1"] = t.MeanValue1; 27 dataset.Tables[0].Rows[i]["StatsValue1"] = t.StatsValue1; 28 dataset.Tables[0].Rows[i]["RatioValue1"] = t.RatioValue1; 29 dataset.Tables[0].Rows[i]["StatsFlag1"] = t.StatsFlag1; 30 dataset.Tables[0].Rows[i]["MeanValue2"] = t.MeanValue2; 31 dataset.Tables[0].Rows[i]["StatsValue2"] = t.StatsValue2; 32 dataset.Tables[0].Rows[i]["RatioValue2"] = t.RatioValue2; 33 dataset.Tables[0].Rows[i]["StatsFlag2"] = t.StatsFlag2; 34 dataset.Tables[0].Rows[i].EndEdit(); 35 break; 36 } 37 38 } 39 40 } 41 } 42 sd.Update(dataset.Tables[0]); 43 conn.Close(); 44 dataset.Tables[0].Clear(); 45 sd.Dispose(); 46 dataset.Dispose(); 47 //一定要釋放 48 }

性能是逐條的20多倍。一般比表連更新方便。

?

還有表連批量更新,寫sql腳本進(jìn)行批量更新,基于ORM框架的更新。

因?yàn)閛rm框架會(huì)自動(dòng)把sql存儲(chǔ)起來然后再一次執(zhí)行。所以基于ORM框架的更新類似于寫sql腳本進(jìn)行批量更新。

轉(zhuǎn)載于:https://www.cnblogs.com/gmf312/p/FZ.html

總結(jié)

以上是生活随笔為你收集整理的批量更新的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。