程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中海量數據的批量插入和更新

C#中海量數據的批量插入和更新

編輯:C#入門知識

對於海量數據的插入和更新,ADO.NET確實不如JDBC做到好,JDBC有統一的模型來進行批操作.使用起來
非常方便:
 PreparedStatement ps = conn.prepareStatement("insert or update arg1,args2....");
 然後你就可以
 for(int i=0;i<1000000000000000;i++){
  ps.setXXX(realArg);
  .....
  ps.addBatch();
  if(i%500==0){ //假設五百條提交一次
   ps.executeBatch();
   //clear Parame Batch
  }
 }
 ps.executeBatch();
 
這樣的操作不僅帶來極度大的性能,而且非常方便.按說,ADO.NET中,要實現這樣的功能,應該直接在Command接口中
或DataAdapter接口中提供Addbat和CommitBat的API,但ADO.NET的卻並沒有這樣簡單地實現,而是要求開發者通過
復雜的變通方法.
 對於大量的插入操作,可以利用一個空的DataTable加入要插入的行,達到一定數量提交後清空該表就行了,
實現起來並不算復雜:

 

\DateTime begin = DateTime.Now;
\string connectionString = ......;
\\using(SqlConnection conn = new SqlConnection(connectionString))...{
\    conn.Open();
\    SqlDataAdapter sd = new SqlDataAdapter();
\    sd.SelectCommand = new SqlCommand("select devid,data_time,data_value from CurrentTest", conn);
\    sd.InsertCommand = new SqlCommand("insert into CurrentTest (devid,data_time,data_value) "
\                    + " values (@devid,@data_time,@data_value);", conn);
\    sd.InsertCommand.Parameters.Add("@devid", SqlDbType.Char, 18, "devid");
\    sd.InsertCommand.Parameters.Add("@data_time", SqlDbType.Char, 19, "data_time");
\    sd.InsertCommand.Parameters.Add("@data_value", SqlDbType.Int, 8, "data_value");
\    sd.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
\    sd.UpdateBatchSize = 0;
\
\    DataSet dataset =

  1. 上一頁:
  2. 下一頁: