J'ai une application C# sur laquelle je travaille et je souhaite exécuter une requête puis exécuter une autre requête dans la sortie de ExecuteReader. Ma question est que cela peut-il être fait dans une seule connexion ou dois-je fermer et rouvrir la connexion chaque fois que je veux exécuter une nouvelle requête?Interrogation dans le retour d'une autre requête en utilisant C# dans une seule connexion MySQL
Répondre
Vous pouvez exécuter une requête après l'autre en utilisant la même connexion. Toutefois, le DataReader utilise la connexion pour lire le résultat, vous devez donc lire le résultat et fermer le lecteur avant de pouvoir exécuter la requête suivante.
Si vous deviez exécuter une autre requête pour chaque ligne du résultat, vous devez d'abord lire le résultat dans une collection, afin de pouvoir fermer le lecteur avant de parcourir le résultat. Alternativement, vous pouvez ouvrir une autre connexion, mais il est préférable de s'en tenir à une seule connexion si possible.
Considérez également si vous pouvez obtenir le résultat dans une requête simple en utilisant une jointure. Il est préférable d'exécuter une seule requête que des centaines.
Vous pouvez réutiliser la connexion. Vous devrez peut-être modifier le CommandType, mais vous n'avez pas besoin de fermer et de rouvrir la connexion. Cela ajoute des frais généraux inutiles.
Est-ce que le CommandType est pas toujours pour les requêtes texte? MySqlCommand qry = nouvelle MySqlCommand ("SELECT somthing FROM table1"); qry.CommandType = System.Data.CommandType.Text; qry.Connection = conn; MySqlDataReader res = qry.ExecuteReader(); – aHunter
Si vous exécutez des requêtes de cette façon, oui, il resterait Text. –
Vous pouvez le faire avec une seule connexion.
Vous n'avez pas besoin d'ouvrir puis de fermer, et la méthode préférée dans ce cas est de garder la connexion ouverte.
Vous n'avez pas à le fermer.
using(connection...)
{
query1;
query2;
}
Merci, vous voulez dire comme ça? en utilisant (MySqlConnection conn = new MySqlConnection (global.connectionString)) { MySqlCommand qry1 = nouveau MySqlCommand ("SELECT quelque chose FROM table1"); MySqlDataReader res_qry1 = qry1.ExecuteReader(); while (res_qry1.Read()) {MySqlCommand qry2 = nouveau MySqlCommand ("SELECT quelque chose FROM table2"); MySqlDataReader res_qry2 = qry2.ExecuteReader(); } – aHunter
Tant que vous fermez le lecteur lorsque vous avez terminé, avant d'exécuter la requête suivante, comme l'a souligné Guffa. –
oui, quelque chose comme ça. –
Vous pouvez également utiliser DataTableReader, qui est un lecteur déconnecté, vous pouvez parcourir ses résultats sans avoir à stocker une autre collection en mémoire nécessitant deux fois l'itération.
- 1. Performance des index MySQL multi-colonnes en utilisant une seule colonne dans une requête
- 2. Copier le résultat d'une requête dans une autre table mysql
- 3. MySQL: retour chariot dans la requête
- 4. Comment effectuer cette tâche dans une seule requête mysql efficace?
- 5. Interrogation de jeux de données similaires mais disjoints dans une seule requête SQL
- 6. mysql - requête de comptage intégré dans une autre requête
- 7. Interrogation deux tables ... dans MySQL
- 8. Référencer une sous-sélection MySQL dans une autre requête
- 9. Linq to SQL utilisant plusieurs DataContexts dans une seule requête
- 10. Est-il possible d'exécuter plusieurs instructions dans une seule requête en utilisant DBD :: Oracle?
- 11. en utilisant les résultats d'une requête sql dans un programme python dans une autre requête sql
- 12. C# MySQL Connexion perdue
- 13. Construire une requête MySQL valide en utilisant Ruby/MySQL
- 14. Django: Interrogation en lecture seule voir sans clé primaire
- 15. Connexion à MySQL en utilisant zend
- 16. En utilisant une balise fmt jsp dans un autre tag
- 17. Comment ignorer une seule ligne dans un résultat de requête en utilisant SQL ou PHP?
- 18. avec une requête imbriquée dans MySQL
- 19. Valeur de retour d'exécution de requête MySQL?
- 20. Comment vérifier si une cellule est en lecture seule dans EXCEL en utilisant C#
- 21. Union requête dans mysql
- 22. Connexion de connexion dans le connecteur MySQL .NET
- 23. en utilisant wxWidgets dans une application GLUT/autre
- 24. Comment ajouter une relation entre deux tables dans Mysql en utilisant le centre de contrôle Mysql
- 25. en utilisant SET type de données dans une base MySQL
- 26. GETing différents modèles de ressources actives dans une seule requête
- 27. Nhibernate - Impossible d'extraire plusieurs collections dans une seule requête
- 28. Division SQL en utilisant « existe pas » dans une base MySQL
- 29. Plusieurs appels Row_Number() dans une seule requête SQL
- 30. requête mysql, réutilisation columnNames dans la requête
Bonne réponse. Je n'ai pas mentionné la fermeture du lecteur. –
Je dois dire que c'est exactement ce que je pensais que le DataReader ne peut être utilisé qu'une seule fois pour cette connexion. En conséquence, parce que vous devez avoir le DataReader pour afficher le résultat, vous devez ouvrir et fermer la connexion. Est-ce la même chose si vous avez un DataReader et ExecuteNonQuery? – aHunter
@Stuart: Vous ne pouvez utiliser un DataReader qu'une seule fois, mais vous n'avez pas besoin d'ouvrir une nouvelle connexion pour chaque DataReader.Si vous avez un DataReader ouvert, sa connexion est nécessaire pour lire son résultat, donc vous ne pouvez pas utiliser la connexion, même pour ExecuteNonQuery. – Guffa