Requête paramétrée de mise à jour comparaison de lignes de codes [Résolu]

Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Dernière intervention
25 juillet 2013
- - Dernière réponse : cs_warzet
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
20
3
Merci
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....

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
20
0
Merci
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
Commenter la réponse de yann_lo_san
Messages postés
354
Date d'inscription
mercredi 13 avril 2011
Dernière intervention
22 novembre 2018
6
0
Merci
ton code fais vomir? il utilise des classes pour la reutilisation

La Science est Grande et Vaste partageons cette connaisance
Commenter la réponse de DevLama
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Dernière intervention
25 juillet 2013
1
0
Merci
Lequel des codes te fait vomir? Tu voudras bien instruire un apprenant Merci
Commenter la réponse de cs_warzet
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Dernière intervention
25 juillet 2013
1
0
Merci
Merci à toi YANN_LO_SAN, je faire de tous tes conseils, car je suis novice en en la matière. Bonne journée
Commenter la réponse de cs_warzet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.