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)
Ou aussi avec SQL Server, vous pouvez l’écrire dans un fichier .csv et utiliser BULK INSERT
Si vous utilisez MySQL, vous pouvez l’écrire dans un fichier .csv et utiliser LOAD DATA INFILE
Si vous utilisez Oracle, vous pouvez utiliser la fonctionnalité de liaison de tableau de ODP.NET.
Si SQLite:
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 #