J'ai besoin d'insérer un tas d'enregistrements similaires dans une table, et je me demandais s'il y avait une façon agréable/facile de le faire. Je sais qu'il serait facile de construire une grosse chaîne, mais j'espérais que je pourrais trouver une façon plus gracieuse de le faire.meilleure façon de générer une instruction d'insertion en masse dans C#?
Répondre
La classe SqlBulkCopy
a WriteToServer
méthodes qui écrivent plusieurs enregistrements.
I a créé une classe qui met en œuvre l'interface IDataReader
, que je peux transmettre en tant que paramètre à une méthode SqlBulkCopy.WriteToServer
(voir ADO.NET: Building a Custom Data Provider for Use with the .NET Data Access Framework pour un exemple de la façon de mettre en œuvre l'interface IDataReader
).
Il pourrait être plus simple d'implémenter IDataReader
(c'est-à-dire en utilisant l'une des autres méthodes SqlBulkCopy.WriteToServer
).
Si vos données sont stockées dans format CSV ou XML, vous pouvez importer les enregistrements avec le serveur SQL (en supposant que vous utilisez SQL Server)
désolé, je viens de vous voir commenter plus tôt. Toutes les données sont en mémoire/classe simple. – Dano
Je pense que la règle générale est que vous ne voulez pas ouvrir/fermer une connexion pour chaque insertion. Aussi évident que cela puisse paraître, il vaut la peine de mentionner que j'ai été témoin de ce problème deux fois, à la fois avec SQL Server. Dans une boucle, le code que j'ai corrigé s'appelait une bibliothèque de classes externe qui ouvrait/fermait une connexion avec chaque insertion. Lors d'une journée chargée, le pool de connexion s'est rempli et les exceptions sont devenues folles. Il a également provoqué des erreurs dans d'autres applications, car aucune connexion n'a pu être établie. Le correctif, bien sûr, était d'ouvrir la connexion avant la boucle, d'appeler la fonction ExecuteNonQuery() dans la boucle (encore et encore), et de fermer la connexion après la boucle. Cela semble trivial, mais c'est vraiment une erreur commune.
Cordialement ...
Si les données source est dans un fichier texte (CSV ou d'un standard, vous pouvez lire), utiliser un StreamReader pour lire chaque ligne, et une fonction qui prend cette ligne et le convertit à une seule instruction d'insertion. Ensuite, il suffit de laisser voler
Par exemple, disons que vous avez un fichier comme celui-ci:
foo 1
bar 2
baz 3
...
using(StreamReader sr = new StreamReader(File.Open("sourcefile.txt", FileMode.Open)))
{
using(SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
string line ="";
while((line = sr.ReadLine()) != "")
{
string[] parts = line.split(new string[]{" "}, StringSplitOptions.None);
string cmdTxt = String.Format("INSERT INTO MyTable(name, value) VALUES('{0}','{1}')", parts[0], parts[1]);
using(SqlCommand cmd = new SqlCommand(cmdTxt, conn))
{
cmd.ExecuteNonQuery();
}
}
}
}
- 1. La meilleure façon d'interroger une base de données en utilisant une instruction OU
- 2. Une meilleure façon de concevoir cette boucle?
- 3. La meilleure façon de générer un document personnalisé?
- 4. Quelle est la meilleure façon de rendre dynamique une instruction LINQ-to-XML?
- 5. XLinq - Une meilleure façon
- 6. meilleure façon de transformer un titre de poste en une URL dans C#
- 7. meilleure façon d'offrir une table de hachage statique C#
- 8. meilleure façon de représenter cette table de recherche dans C#
- 9. Meilleure façon de transformer l'objet en int
- 10. Meilleure façon de randomiser une liste de chaînes en Python
- 11. Meilleure façon de stocker une taille de fichier en octets?
- 12. Meilleure façon d'analyser une table dans Ruby
- 13. Meilleure façon d'authentifier en PHP
- 14. La meilleure façon de mettre en œuvre une procédure stockée avec recherche en texte intégral
- 15. Comment générer une URL conviviale en C#?
- 16. Meilleure façon de générer une version statique du site Web "dynamique"
- 17. Quelle est la meilleure façon d'écrire [0..100] en C#?
- 18. Quelle est la meilleure façon de formater C# dans WordPress?
- 19. Meilleure façon de réorganiser une ArrayList en Java
- 20. Comment générer un nombre aléatoire en C#?
- 21. Générer une énumération aléatoire en C# 2.0
- 22. Quelle est la meilleure façon de "mettre en carré" une image dans .NET?
- 23. C# Meilleure façon de convertir le format de date de chaîne en une autre chaîne?
- 24. La meilleure façon de générer une chaîne alphanumérique à 2 caractères?
- 25. Mise à jour en masse dans MYSQL
- 26. Meilleure façon de créer une carte vide en Java
- 27. Meilleure façon d'obtenir une valeur DateTime statique
- 28. Quelle est la meilleure façon d'enregistrer un RichTextFile en C#?
- 29. En C#, quelle est la meilleure façon d'enchaîner les constructeurs?
- 30. Suggestion nécessaire: Meilleure façon d'analyser HTML en C#
Quelle est cette « bande »? –
codera les générateurs comme l'aide de codesmith? –
Où ces enregistrements sont-ils actuellement stockés? –