Ben met ça ailleurs !Home.wConnexion.Close();
C'est tellement logique ! Le While va refaire un reader.Read() qui a sa connexion fermée ! Donc erreur ...
Ben met ça ailleurs !Home.wConnexion.Close();
C'est tellement logique ! Le While va refaire un reader.Read() qui a sa connexion fermée ! Donc erreur ...
fermer la connexion après le premier tour de boucle, tu m'étonnes que ça beugle !
Normalement, avec les using, tu n'as pas à faire le close toi-même. Il doit le faire tout seul (si quelqu'un peut confirmer ?)
Edit : j'auris pu chercher au mieux de demander la confirmation
Quand je le mets autre par j'obtiens tjrs le meme message d'erreur
Si while ferme pourquoi je n'arrive pas a afficher une deuxieme fois ?
VS me dit que la connexion est toujours ouverte alors il faut la fermer pour que je puisse de nouveau afficher des infos?
comboBox2, textBox2...textBox12 mais comment peut-on laisser le nommage automatique de l'IDE, c'est infame ! Mais passons !
Pour information, la DLL LibMySQL.dll fournit la fonction mysql_real_escape_string qui permet de se protéger contre problème d'injection de SQL
Il est assez drôle de voir que les développeurs du site mysql.com n'ont pas respecté leur propre conseil !
Pour les requêtes paramètres, il y a un débat sur la forme paramètrée du LIKE car selon la DB, le support est différent (voire incompatible)
Certains proposent :
:param1 = "valeur a chercher"
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part SELECT table1.* FROM table1 WHERE field1 like %:param1%
d'autres (dont je fais parti)
:param1 = "%valeur a chercher%"
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part SELECT table1.* FROM table1 WHERE field1 like :param1
la seule chose que je peux dire c'est que seule la seconde forme passe avec PHP\ZendDB\MySQL qui utilise des requêtes paramètres non nommées "like ?param1" -> "like ?"
PDO fournit le supporte des paramètres nommés "like :param1"
La 1ère forme fonctionne sous FireBird\InterBase !
Pour le like sans %, effectivement, une petite case à cocher sur ton écran de recherche pourrait indiquer un mode "strict" avec = ou un mode "partiel" avec like %
Par expérience, sur des tables avec 300 000 personnes, il est vivement déconseillé de faire un like sur moins de 3 caractères, les temps de réponse peuvent être très long (à cause du volume d'enregistrement renvoyé, un LIMIT peut-être utile)
A l'époque en MySQL 4.1 (de EasyPHP 1.8), tout le temps de la recherche, le SELECT LIKE provoquait un LOCK de la Table, donc tout accès concurrent UPDATE\INSERT sur cette table devait attendre que la requête soit terminée (et complètement expédiée), ce qui peut être pénible pour l'utilisateur !
MySQL 5.x le supporte mieux, surtout avec les transactions, mais il faut tout de même faire attention
Pour les noms asiatiques comme Li ou même Y (oui c'est un nom !), on voit la necessite d'avoir un mode Strict = !
Pour les chaines contenant ' comme "N'Guyen", le ' peut provoquer des surprises effectivement, avec MySQL, je préfère " comme délimiteur de chaine, il est moins problématique que ' même si les deux sont supportés (ce n'est pas le cas pour la plupart des autres SGBD)
l'utilisation de \" dans le code C# est un peu pénible, mais évite de se poser la Question du ' dans le SQL
a l'identification user et mot de passe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 wConnexion = new MySqlConnection(connStr); wConnexion.Open();
Ce qu'il y d'incompréhensible dans ton code, c'est les Edit !
Alimenté des Items d'un Combo dans une boucle, c'est logique !
Par contre, tes edit vont contenir forcément la dernière ligne !
Pour connexion.close en plein milieu d'une lecture, sans commentaire !
pour Using je confirme, par contre, cela ne dispense par de faire le Open
Surtout que l'on peut penser que moonshine972, tu utilises systématiquement using ? donc ce 1er Open est vite annulé par le 1er using !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 using (Home.wConnexion) { Home.wConnexion.Open(); ...
ça passe son temps à fermer et ouvrir la connexion !
Tu m'étonnes que ça marche pas, tu l'ouvres qu'une seule fois mais dès que tu fais tes using, à la fin ça ferme ta connexion mais tu la réouvres pas
Ce serait plus approprié de mettre cette ligne
Juste en dessous de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part wConnexion.Open();
Tu as un exemple ici, deuxième bout de code. Mais honnêtement, vaut mieux faire comme dans le premier bout de code. C'est bien plus simple à gérer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 using (Home.wConnexion) { // à mettre ici
j'obtiens ce m'essage d'erreur qui me dit que la connexion est deja ouverte
j'ai fait ceci:The connection is already open.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void button3_Click(object sender, RoutedEventArgs e) { using (Home.wConnexion) { Home.wConnexion.Open(); // Instancier lobjet Command using (MySqlCommand wCommand = Home.wConnexion.CreateCommand())
Enlève l'ouverture de connexion à l'identification.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 using (Home.wConnexion) { if (Home.wConnexion.State != ConnectionState.Open) Home.wConnexion.Open(); ...
moonshine972, tu pourrais chercher un minimum !
Ne me sort pas l'excuse : "je suis débutant", je suis programmeur C++, je ne fais pas de C# (je ne sais même à quoi ressemble Visual studio), ça se trouve sur en 10s !
Suffit de lire ADO.NET : les objets Connection, Command et Datareader en C#, l'auteur a eu l'excellente idée de montrer "oConnection.State" dans son tutoriel, suffit ensuite de chercher dans la msdn ConnexionState
j'ai trouvé!
j'ai viré using (home.wconnexion)
et tout fonctionne.
je suis débutant en plus :-)
Merci beaucoup pour votre aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager