当前位置:编程学习 > C#/ASP.NET >>

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 =
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,