Requête paramétrée de mise à jour comparaison de lignes de codes

Résolu
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 - 4 janv. 2013 à 10:31
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 - 7 janv. 2013 à 09:58
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

5 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
4 janv. 2013 à 17:51
Re,

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 :

OleDbConnection Conx = null;
try
{
// open ect...
}
catch()
{
// erreur
}
finally
{
if( Conx != null )
Conx.Close();
}

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);

De plus, préférer Environment.NewLine à "\r\n"

Mais bon, chacun code comme il veut


bye....
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
4 janv. 2013 à 13:48
Salut,

Voici ce que dit MSDN :

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é.

bye
0
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 10
4 janv. 2013 à 16:24
ton code fais vomir? il utilise des classes pour la reutilisation

La Science est Grande et Vaste partageons cette connaisance
0
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 1
4 janv. 2013 à 17:02
Lequel des codes te fait vomir? Tu voudras bien instruire un apprenant Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 1
7 janv. 2013 à 09:58
Merci à toi YANN_LO_SAN, je faire de tous tes conseils, car je suis novice en en la matière. Bonne journée
0
Rejoignez-nous