Michel Perfetti
SQL Server 2005 : Insérer des données dans une table avec SqlBulkCopy
Cette astuce présente une nouvelle méthode pour insérer des données dans une base SQL Server 2005
Par Michel Perfetti publié le 25/07/2005 à 16:42, lu 12925 fois,
SQL Server 2005 fournit la classe "SqlBulkCopy" qui permet de charger une DataTable dans une table de façon très performante. Pour l'illustrer, je vais utiliser une table « DemoTable » dans une base de données qui contient 2 champs :
  • DB_Field_1, de type entier
  • DB_Field_2, aussi de type entier
La DataTable que je vais copier contient 2 colonnes :
  • DT_Field_1, de type entier
  • DT_Field_2, aussi de type entier
SqlBulkCopy a besoin de connaître la table dans laquelle l'insertion sera faite :
SqlBulkCopy bulkCopy = new SqlBulkCopy(cnx, SqlBulkCopyOptions.CheckConstraints, null);
bulkCopy.DestinationTableName = "DemoTable";    
SqlBulkCopy a besoin aussi de connaître la façon de relier les colonnes la DataTable aux colonnes de la table de la base. Pour notre exemple, nous relions DT_Field_1 à DB_Field_1 et DT_Field_2 à DB_Field_2 :
bulkCopy.ColumnMappings.Add("DT_Field_1", "DB_Field_1");
bulkCopy.ColumnMappings.Add("DT_Field_2", "DB_Field_2");
Il ne suffit plus qu'à copier notre DataTable (qui est dans la variable « dt ») :
bulkCopy.WriteToServer(dt);
Voici le lien vers le MSDN à partir duquel vous trouverez d'autres options intéressantes sur cette classe comme, par exemple, la possibilité de brancher un événement à la fin de la copie ou d'activer un timeout sur la durée de la copie.
 
» Démarrer une discussion