Encore un problème avec une requête MYSQL en C#
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:
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:
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,
Code:
"UPDATE tbleleves SET @Champ = @NouvelleValeur WHERE fldIdentifiant = @Id"
ne fonctionne pas
Code:
"UPDATE tbleleves SET fldNom = @NouvelleValeur WHERE fldIdentifiant = @Id"
fonctionne.
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