更新数据使用一个TableAdapter:糟糕的表演
问题描述:
- 数百CSV
- 的每一个CSV我有数千行数据保存到一个SQL表
- 我使用C#.NET,数据集,tableadaptes你可以在下面的伪代码中读取
- 性能很差:大约100行/秒。 我该如何改进我的代码?
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);
答
这是一个测试,很好的解决方案:< 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);
}
}
是SSIS不是一个不错的选择?如果没有,建立一个参数化大块SQL将执行我知道的最快速度。但是,查询中可以有多少个参数(我认为是32,000)有限制,所以如果采取这种方法,您仍然需要对它们进行批处理。 – DiskJunky
可能的重复:https://*.com/questions/1050112/how-to-read-a-csv-file-into-a-net-datatable。 – jsanalytics
@jstreet,它不是真的重复 - OP要求导入CSV的有效方法,而不是*如何导入CSV – DiskJunky