批量更新

这是最基本的批量更新。我使用的时候还不如逐条。

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

 ///批量更新,效率太低,不如逐条更新
        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语句:多了空格;字符串截取:起始位置出错
            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);
            //执行更新
            sda.Update(dtx.GetChanges());
            //使DataTable保存更新
            dtx.AcceptChanges();
        }

  

 

下面是另一种更新,这是在表级别的更新。

先要获取主键和要更新的字段。然后改吧改吧形成一个新的datatable。再一次性更新到数据库。感觉和批量插入类似,批量插入要自己造一个datatable,然后一次性插入到数据库。

 1 //把数据库的压力转移到内存 
 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脚本进行批量更新,基于ORM框架的更新。

因为orm框架会自动把sql存储起来然后再一次执行。所以基于ORM框架的更新类似于写sql脚本进行批量更新。

posted @ 2017-02-24 13:42  水务大牛  阅读(410)  评论(0)    收藏  举报