Problème de doublons

Résolu/Fermé
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 - 14 mars 2013 à 08:54
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 - 14 mars 2013 à 10:32
Bonjour,

Je suis novice en MySql et je suis en train de développer une application et C#.
En fait, j'importe un fichier .csv dans ma base de données.

Dans mon fichier csv, j'ai environ 1000 lignes, ces lignes représentes chacune une personne (Avec Nom, Prénom, Classe, N°Carte).
J'importe ce fichier dans ma BDD, qui contient déjà des personnes.
Il est donc fortement possible qu'il y est des doublons entre mon fichier csv et ma BDD.
Comme le N°Carte doit etre unique, avec phpMyAdmin, je l'avais mis en Unique.
Ça marche pas trop mal, mais je rencontre un soucis. En fait, des que je lance mon importation (donc le contenu de mon fichier csv est copié dans ma BDD), et qu'un doublon est rencontré, tout s'arrête. Au lieu de simplement 'zapper' cette personne, tout est arreté.

Exemple : Si j'ai un fichier de 1000 personnes, et que le doublon apparaît à la 3eme ligne, les 997 autres personnes ne sont pas importées.

Si avec visual studio, je passe en mode debug, je me rends compte qu'en fait, des que le doublon apparait, mon code passe directement dans le catch.

Donc y a-t-il un autre moyen d'éviter les doublons ?
Est-ce qu'il est possible de faire ça en modifiant ma requete sql ?

RPassageAnnee = "INSERT INTO eleves(Nom,Prenom,Classe,NumCarte) VALUES('" + Nom[i] + "','" + Prenom[i] + "','" + Classe[i] + "', '" + NumCarte[i] + "')";
                    MySqlCommand cmdPassageAnnee = new MySqlCommand(RPassageAnnee, conn);
                    cmdPassageAnnee.ExecuteNonQuery();

Est-ce que l'on peut se servir de distinct dans ce cas ?

Toute aide est la bienvenue !

Merci d'avance

Coxycross :)



3 réponses

Utilisateur anonyme
14 mars 2013 à 09:20
Bonjour

Tu dois t'en sortir avec la clause ON DUPLICATE KEY
1
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 110
14 mars 2013 à 09:39
Merci, je ne connaissais pas, mais dans ce cas là, quand la clef existe déjà je suis censé lui indiquer quoi ?

Parce que dans les exemples que l'on voit, lorsque la clef existe déjà, on fait une opération quelconque. Mais moi il ne doit justement rien se passer quand il y a un doublon, ce doublon ne doit pas être importé, puis l'importation reprend, et les autres sont bien ajoutés dans ma BDD
0
Je n'ai pas essayé, mais je ferais un UPDATE qui ne change rien, genre
ON DUPLICATE KEY UPDATE Nom=Nom
0
Utilisateur anonyme
14 mars 2013 à 10:08
Après essai, ça a bien l'air de marcher.
0
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 110
14 mars 2013 à 10:09
Merci je test ça de suite !
0
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 110
14 mars 2013 à 10:18
Je viens de tester, cela :
RPassageAnnee = "INSERT INTO eleves(Nom,Prenom,Classe,NumCarte) VALUES('" + Nom[i] + "','" + Prenom[i] + "','" + Classe[i] + "', '" + NumCarte[i] + "' ON DUPLICATE KEY UPDATE Nom='" + Nom[i] + "')";


Et lorsque j'ouvre mon fichier, et que je commence l'importation, j'ai une erreur de syntaxe dans le ON DUPLICATE etc ....

Une idée ?
0
Utilisateur anonyme
14 mars 2013 à 10:28
Deux remarques :
La parenthèse est à refermer AVANT le ON DUPLICATE...
Si tu veux que l'UPDATE ne fasse vraiment rien, il vaut mieux mettre simplement Nom=Nom que Nom='" + Nom[i] + "'"
0
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 110
14 mars 2013 à 10:28
Oui je viens de me rendre compte de la parenthèse à l'instant ...
Je retest ça !
0
coxycross Messages postés 788 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 12 février 2015 110
14 mars 2013 à 10:32
Ah ! Merci beaucoup de ton aide, ça marche parfaitement, comme je le souhaitais !

Merci bien, ça faisait plusieurs heures que je bloquais sur ce problème !
0