Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Insérer l'intégralité du DataTable dans la base de données en une seule fois au lieu de ligne par ligne ?

J'ai découvert que SqlBulkCopy est un moyen simple de le faire et ne nécessite pas l'écriture d'une procédure stockée dans SQL Server.

Voici un exemple de la façon dont je l'ai implémenté :

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