Meilleur moyen d’insérer en bloc à partir d’un DataTable C #

J’ai un DataTable que je veux pousser à la firebase database. Je veux pouvoir dire comme

 myDataTable.update(); 

Mais après avoir lu la documentation MSDN, cela insère apparemment ligne par ligne.

Il convient de noter que ces instructions ne sont pas exécutées par lots; chaque ligne est mise à jour individuellement.

Quelles sont mes alternatives?

Edit: J’utilise SQL Server 2005

Si vous utilisez SQL Server, SqlBulkCopy.WriteToServer(DataTable)

  • Méthode SqlBulkCopy.WriteToServer (DataTable)

Ou aussi avec SQL Server, vous pouvez l’écrire dans un fichier .csv et utiliser BULK INSERT

  • BULK INSERT (Transact-SQL)

Si vous utilisez MySQL, vous pouvez l’écrire dans un fichier .csv et utiliser LOAD DATA INFILE

  • LOAD DATA INFILE Syntaxe

Si vous utilisez Oracle, vous pouvez utiliser la fonctionnalité de liaison de tableau de ODP.NET.

  • Insertion en bloc dans Oracle à l’aide de .NET

Si SQLite:

  • Comment puis-je insérer en vrac avec SQLite?
  • Inserts en vrac plus rapides dans sqlite3?
 ssortingng connectionSsortingng= ServerName + DatabaseName + SecurityType; using (SqlConnection connection = new SqlConnection(connectionSsortingng)) using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { connection.Open(); bulkCopy.DestinationTableName = "TableName"; try { bulkCopy.WriteToServer(dataTableName); } catch (Exception e) { Console.Write(e.Message); } } 

Veuillez noter que la structure de la table de firebase database et le nom de la table doivent être identiques, sinon une exception sera levée.

Cela dépendra en grande partie du SGBDR que vous utilisez et de l’existence éventuelle d’une option .NET pour ce SGBDR.

Si vous utilisez SQL Server, utilisez la classe SqlBulkCopy .

Pour les autres fournisseurs de bases de données, essayez spécifiquement de les rechercher sur Google. Par exemple, une recherche sur “Insertion en bloc .NET dans Oracle” a donné des résultats intéressants, y compris ce lien vers le débordement de stack: insertion en bloc dans Oracle à l’aide de .NET .

Voici comment je le fais en utilisant un DataTable. C’est une pièce de travail du code TEST.

 using (SqlConnection con = new SqlConnection(connStr)) { con.Open(); // Create a table with some rows. DataTable table = MakeTable(); // Get a reference to a single row in the table. DataRow[] rowArray = table.Select(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con)) { bulkCopy.DestinationTableName = "dbo.CarlosBulkTestTable"; try { // Write the array of rows to the destination. bulkCopy.WriteToServer(rowArray); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }//using 

La classe SqlBulkCopy est la meilleure pour le serveur SQL,

Effectuer un chargement / insertion en masse de DataTable dans une table dans un serveur SQL en C #