【问题标题】:Update Data Using a TableAdapter: bad performances使用 TableAdapter 更新数据:性能不佳
【发布时间】:2018-03-21 17:11:52
【问题描述】:
  • 数百个csv
  • 对于每个 csv,我必须将数千行数据保存到一个 sql 表中
  • 我正在使用 c# .net、dataset、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);

【问题讨论】:

  • 这里不是 SSIS 选项吗?如果没有,构建一个大块 SQL 的参数化将执行最快,我知道。但是,一个查询中可以有多少个参数是有限制的(我认为是 32,000 个),因此如果采用这种方法,您仍然需要对它们进行批处理。
  • @jstreet,这并不是真正的重复 - OP 要求的是一种有效的方式来导入 CSV,而不是 如何 来导入 CSV

标签: c# asp.net datatable dataset tableadapter


【解决方案1】:

这是一个经过测试的出色解决方案:

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);
        }
    }

【讨论】:

    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2022-09-26
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多