Accélération des insertions de base de données DataTable avec SqlBulkCopy
L'insertion de grands ensembles de données ligne par ligne dans une base de données est notoirement lente. Cet article présente une méthode beaucoup plus efficace : utiliser SqlBulkCopy pour insérer un DataTable entier à la fois.
SqlBulkCopy : insertion de données en masse pour des performances améliorées
SqlBulkCopy, une classe au sein de l'espace de noms .NET System.Data.SqlClient, permet l'insertion de données en masse à grande vitesse. Il surpasse considérablement les insertions de lignes individuelles en optimisant le transfert de données et en minimisant les interactions avec la base de données.
Mise en œuvre : un exemple pratique
L'utilisation de SqlBulkCopy nécessite une connexion à la base de données et un objet SqlBulkCopy correctement configuré. L'extrait de code suivant illustre le processus :
<code class="language-csharp">using (var bulkCopy = new SqlBulkCopy(_connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity)) { // Assumes DataTable and SQL table columns have matching names. foreach (DataColumn col in table.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } bulkCopy.BulkCopyTimeout = 600; // Timeout in seconds bulkCopy.DestinationTableName = destinationTableName; bulkCopy.WriteToServer(table); }</code>
Résolution des écarts de mappage de colonnes
L'exemple ci-dessus suppose des noms de colonnes identiques entre le DataTable et la table SQL. Si ce n'est pas le cas, vous devrez définir explicitement les mappages de colonnes au sein de la collection ColumnMappings
pour garantir une insertion précise des données.
Cette méthode s'avère particulièrement bénéfique lors de l'insertion de grands ensembles de données avec moins de colonnes que la table SQL cible. Les colonnes sans correspondance prendront automatiquement par défaut les valeurs NULL. En utilisant SqlBulkCopy, vous améliorez considérablement les performances d'insertion de DataTable, en évitant les goulots d'étranglement des méthodes itératives ligne par ligne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!