Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fügen Sie die gesamte DataTable auf einmal in die Datenbank ein, anstatt Zeile für Zeile?

Ich habe festgestellt, dass SqlBulkCopy eine einfache Möglichkeit dafür ist und keine gespeicherte Prozedur in SQL Server geschrieben werden muss.

Hier ist ein Beispiel, wie ich es implementiert habe:

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