Bonjour à tous, je voudrais soumettre à votre sagacité ces deux code de mise à jour et vous demander de m'en donner la différence, car il se trouve que premier ne marche et je ne comprends pas cela. Merci
#region MISE A JOUR EMPLOI DU TEMPS
private void MAJ_EDT()
{
try
{
// Connexion à la base de test
OleDbConnection Conx = new OleDbConnection(strConex);
Conx.Open();
//Préparation des paramètres
OleDbParameter Param_CodeClas = new OleDbParameter("@CodeClass", OleDbType.Integer);//0
OleDbParameter Param_CodeEns = new OleDbParameter("@CodeEns", OleDbType.VarWChar,50);//1
OleDbParameter Param_CodMat = new OleDbParameter("@CodeMat", OleDbType.Integer);//2
OleDbParameter Param_CodeAn = new OleDbParameter("@CodeAn", OleDbType.Integer);//3
OleDbParameter Param_IdEns = new OleDbParameter("@IdEns", OleDbType.Integer);//4
Param_CodeClas.Value = this.txtCodeClasse.Text;//0
Param_CodeEns.Value = this.txtCodeEnseignant.Text;//1
Param_CodMat.Value = this.txtCodeMatiere.Text;//3
Param_CodeAn.Value = this.txtCodeAnneeScolaire.Text;//5
Param_IdEns.Value = this.txtIdEnseigner.Text;//2
OleDbCommand Comd = new OleDbCommand("UPDATE [EmploiDuTemps] SET code_classe=@CodeClass, code_enseignant=@CodeEns," + "\n" +
"code_matiere=@CodeMat, code_annee=@CodeAn" + "\n" +
"WHERE id_enseigner=@IdEns",Conx);
Comd.Parameters.Add(Param_CodeClas);//0
Comd.Parameters.Add(Param_CodeEns);//1
Comd.Parameters.Add(Param_CodMat);//2
Comd.Parameters.Add(Param_CodeAn);//3
Comd.ExecuteNonQuery();
Conx.Close();
}
catch (FileNotFoundException ex) //(Exception ex)
{
MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void MAJ_EmploiDuTemps()
{
try
{
OleDbCommand Comd = new OleDbCommand("UPDATE [EmploiDuTemps] SET code_classe=?, code_enseignant=?," + "\n" +
"code_matiere=?, code_annee=? WHERE id_enseigner = " + this.txtIdEnseigner.Text);
Comd.Parameters.Add(new OleDbParameter("code_classe", System.Data.OleDb.OleDbType.Integer,7,
ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, this.txtCodeClasse.Text));
Comd.Parameters.Add(new OleDbParameter("code_enseignant", System.Data.OleDb.OleDbType.VarWChar, 50,
ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, this.txtCodeEnseignant.Text));
Comd.Parameters.Add(new OleDbParameter("code_matiere", System.Data.OleDb.OleDbType.Integer,7,
ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, this.txtCodeMatiere.Text));
Comd.Parameters.Add(new OleDbParameter("code_annee", System.Data.OleDb.OleDbType.Integer,7,
ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, txtCodeAnneeScolaire.Text));
//Declaration de ma connexion
OleDbConnection Conex = new OleDbConnection(strConex);
//Initialisation de la connexion
Comd.Connection = Conex;
//Ouverture de la connexion
Conex.Open();
//Execution de la commande
Comd.ExecuteNonQuery();
//Fermeture de la connexion
Comd.Connection.Close();
}
catch (FileNotFoundException ex) //(Exception ex)
{
MessageBox.Show(ex.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion
A voir également:
Requête paramétrée de mise à jour comparaison de lignes de codes
en ce qui concerne la structure de ton code,
je n'irais pas aussi loin que okosa, mais quelquess remarques :
Les nom de méthode ne doivent pas être en majuscule ni commencer par une majuscule
maMethodeQuiFaitUneAction()
Il faut prévoir les exceptions, et en mettant le Close() de la connexion tel qu'il est, il se peut qu'il ne soit jamais exécuté,
faire plutôt un truc du genre :
Les retours chariots dans la requete ne servent à rien : + "\n"
Utiliser un simple String.Format ou un StringBuilder est souvent plus efficace si beaucoup de concaténations (car à chaque concaténation, le framework alloue une nouvelle chaine de taille arbitrairement trop grande) :
string requete = String.Format(
"UPDATE [EmploiDuTemps] SET code_classe=?, code_enseignant=?, code_matiere=?, code_annee=? WHERE id_enseigner = {0}", this.txtIdEnseigner.Text);
Le fournisseur OLE DB .NET ne prend pas en charge les paramètres nommés pour passer des paramètres à une instruction SQL ou à une procédure stockée appelée par un OleDbCommand si CommandType a la valeur Text. Dans ce cas, l'espace réservé représenté par le point d'interrogation (?) doit être utilisé.