Recherche de Doublons dans une base ACCESS 2003

cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 - 13 août 2012 à 08:59
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 - 13 août 2012 à 10:22
Bonjour,
Dans mon application, je souhaiterai lors de l'enregistrement des diplômes scolaires vérifier que le diplôme n'est réenregistré. Aussi voici ce que j'ai fais:

Cnx.Open();

System.Data.OleDb.OleDbDataReader DtR;
System.Data.OleDb.OleDbCommand Comde = new System.Data.OleDb.OleDbCommand("SELECT * FROM [Diplomer] where code_eleve='" + this.txtCodeEleve.Text + "' And num_diplome='" + this.txtNumDiplome.Text + "';", Cnx);
DtR = Comde.ExecuteReader();
if (DtR.Read() != true)
{

Mon Code d'Enregistrement
}
else
{
MessageBox.Show("Le Diplôme de cet \nElève est déjà enregistré", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
DtR.Close();

Cela me renvoie l'erreur suivante
Type de donné non compatible dans le critère


Par ailleurs je signale que les champs
code_eleve
num_diplome
sont de type numérique et sont des clés étrangères.
Merci pour votre aide.

2 réponses

Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
13 août 2012 à 10:08
Tu considères que les champs code_eleve et num_diplome sont des strings au lieu de numériques

Par contre, ton code est peu résistant aux erreurs et a quelques failles de sécurités (comme les injections SQL)
Un exemple plus résistant et plus sécurisé avec ton code retravaillé:

try
{
Cnx.Open(); 

System.Data.OleDb.OleDbDataReader DtR; 
String query = "SELECT * FROM [Diplomer] where code_eleve=@p1 And num_diplome=@p2;";
System.Data.OleDb.OleDbCommand Comde = new System.Data.OleDb.OleDbCommand(query, Cnx);
Comde.Paramaters.Add("p1", int.Parse(this.txtCodeEleve.Text));
Comde.Paramaters.Add("p2", int.Parse(this.txtNumDiplome.Text));
DtR = Comde.ExecuteReader(); 
if (DtR.Read() != true) 
{
// tu sauves tes données
}
else
MessageBox.Show("Le Diplôme de cet \nElève est déjà enregistré", this.Text,    MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
}
catch(OleDbException oleExc)
{
// logger l'erreur et afficher une erreur d'enregistrement à l'utilisateur
}
finally
{
// fermer la connexion
}
0
cs_warzet Messages postés 99 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 juillet 2013 1
13 août 2012 à 10:22
Merci pour ton aide, je vais de ce pas l'essayer.
Je ne suis pas entré dans les détails du code, sinon les clause
try
{
}
catch
{
}

y figure. merci encore et bientot.
0
Rejoignez-nous