更新数据使用一个TableAdapter:糟糕的表演

问题描述:

  • 数百CSV
  • 的每一个CSV我有数千行数据保存到一个SQL表
  • 我使用C#.NET,数据集,tableadaptes你可以在下面的伪代码中读取
  • 性能很差:大约100行/秒。 我该如何改进我的代码?

伪代码更新数据使用一个TableAdapter:糟糕的表演

var dsMaster = new DS_Master(); 
var el99TestTableAdapter = new EL_99_TESTTableAdapter(); 

Cycle 
    var el99TestRow = dsMaster.EL_99_TEST.NewEL_99_TESTRow(); 
    dsMaster.EL_99_TEST.Rows.Add(el99TestRow); 
end Cycle 

el99TestTableAdapter.Adapter.Update(dsMaster.EL_99_TEST); 
+0

是SSIS不是一个不错的选择?如果没有,建立一个参数化大块SQL将执行我知道的最快速度。但是,查询中可以有多少个参数(我认为是32,000)有限制,所以如果采取这种方法,您仍然需要对它们进行批处理。 – DiskJunky

+0

可能的重复:https://*.com/questions/1050112/how-to-read-a-csv-file-into-a-net-datatable。 – jsanalytics

+0

@jstreet,它不是真的重复 - OP要求导入CSV的有效方法,而不是*如何导入CSV – DiskJunky

这是一个测试,很好的解决方案:< 5秒85000行

private void BulkSaveCsvData(DataTable dt, string destinationTableName) 
    { 
     using (var bulkCopy = new SqlBulkCopy(_dbConnecion, SqlBulkCopyOptions.Default)) 
     { 
      foreach (DataColumn col in dt.Columns) 
      { 
       bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); 
      } 
      bulkCopy.BulkCopyTimeout = 600; 
      bulkCopy.DestinationTableName = destinationTableName; 
      bulkCopy.WriteToServer(dt); 
     } 
    }