一尘不染

一次将整个DataTable插入数据库中,而不是逐行插入吗?

c#

我有一个数据表,需要将整个内容推送到数据库表。

我可以使用foreach将所有内容放入其中,并一次插入每一行。尽管由于有数千行,所以执行速度非常慢。

有什么方法可以一次完成整个数据表吗?

DataTable的列少于SQL表。其余的应保留为NULL。


阅读 251

收藏
2020-05-19

共1个答案

一尘不染

我发现SqlBulkCopy是执行此操作的一种简便方法,并且不需要在SQL Server中编写存储过程。

这是我如何实现的示例:

// take note of SqlBulkCopyOptions.KeepIdentity , you may or may not want to use this for your situation.

using (var bulkCopy = new SqlBulkCopy(_connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
{
      // my DataTable column names match my SQL Column names, so I simply made this loop. However if your column names don't match, just pass in which datatable name matches the SQL column name in Column Mappings
      foreach (DataColumn col in table.Columns)
      {
          bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
      }

      bulkCopy.BulkCopyTimeout = 600;
      bulkCopy.DestinationTableName = destinationTableName;
      bulkCopy.WriteToServer(table);
}
2020-05-19