Bonsoir,
J'ai encore un soucis avec une requête MYSQL en C#.
Voici ce qui se passe lorsque j'appuie sur le bouton :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 if (textBoxIdentifiant.TextLength == 0) MessageBox.Show("Erreur, pour mettre à jour les données d'un élève, son identifiant est obligatoire"); else { if (textBoxNom.TextLength != 0) MiseAJourDonneesEleve("fldNom", textBoxNom.Text, Convert.ToInt32(textBoxIdentifiant.Text), 1); // 1 = valeur string, 2 = valeur int if(textBoxPrenom.TextLength != 0) MiseAJourDonneesEleve("fldPrenom", textBoxPrenom.Text, Convert.ToInt32(textBoxIdentifiant.Text), 1); if(textBoxClasse.TextLength != 0) MiseAJourDonneesEleve("fldClasse", textBoxClasse.Text, Convert.ToInt32(textBoxIdentifiant.Text), 1); if(textBoxPhoto.TextLength != 0) MiseAJourDonneesEleve("fldPhoto", textBoxPhoto.Text, Convert.ToInt32(textBoxIdentifiant.Text), 1); if(textBoxSolde.TextLength != 0) MiseAJourDonneesEleve("fldSolde", textBoxSolde.Text, Convert.ToInt32(textBoxIdentifiant.Text), 2);
Et voici la fonction MiseAJourDonneesEleve :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 void MiseAJourDonneesEleve(string NomDuChamp, string Valeur, int Identifiant, int TypeValeur) { maRequeteMiseAJourDonneesEleve = "UPDATE tbleleves SET @Champ = @NouvelleValeur WHERE fldIdentifiant = @Id"; maCommandeMiseAJourDonneesEleve = new MySqlCommand(maRequeteMiseAJourDonneesEleve, maConnexion); maCommandeMiseAJourDonneesEleve.Parameters.Add(new MySqlParameter("@Champ", MySqlDbType.String, 15)); maCommandeMiseAJourDonneesEleve.Parameters.Add(new MySqlParameter("@Id", MySqlDbType.Int32, 8)); try { maCommandeMiseAJourDonneesEleve.Parameters["@Champ"].Value = NomDuChamp; } catch { }; try { maCommandeMiseAJourDonneesEleve.Parameters["@Id"].Value = Identifiant; } catch { }; if (TypeValeur == 1) // 1 = valeur string, 2 = valeur int { maCommandeMiseAJourDonneesEleve.Parameters.Add(new MySqlParameter("@NouvelleValeur", MySqlDbType.String, 20)); try { maCommandeMiseAJourDonneesEleve.Parameters["@NouvelleValeur"].Value = Valeur; } catch { MessageBox.Show("Erreur au niveau de la nouvelle valeur de " + NomDuChamp); }; } else { maCommandeMiseAJourDonneesEleve.Parameters.Add(new MySqlParameter("@NouvelleValeur", MySqlDbType.Int32, 8)); try { maCommandeMiseAJourDonneesEleve.Parameters["@NouvelleValeur"].Value = Valeur; } catch { MessageBox.Show("Erreur au niveau de la nouvelle valeur de " + NomDuChamp); }; } try { maCommandeMiseAJourDonneesEleve.Connection.Open(); maCommandeMiseAJourDonneesEleve.ExecuteScalar(); maCommandeMiseAJourDonneesEleve.Connection.Close(); } catch { MessageBox.Show("Erreur lors de la mise à jour des données"); } }
Le code plante au niveau de la requête.
J'ai testé avec des points d'arrêt,
ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part "UPDATE tbleleves SET @Champ = @NouvelleValeur WHERE fldIdentifiant = @Id"
fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "UPDATE tbleleves SET fldNom = @NouvelleValeur WHERE fldIdentifiant = @Id"
Voici une image qui montre que la variable NomDuChamp est égale à ce que je voulais :
http://cjoint.com/14ma/DCitWLGUvrK_bug.jpg
Après NomDuChamp je le passe dans @Champ et @Champ est correctement inséré dans la requête.
Qui peut voir d'où vient le problème s'il vous plait ?
Merci d'avance
Partager