Problème de doublons

Résolu
coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   -  
coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Utilisateur anonyme
     
    Bonjour

    Tu dois t'en sortir avec la clause ON DUPLICATE KEY
    1
    1. coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   110
       
      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
    2. Utilisateur anonyme
       
      Je n'ai pas essayé, mais je ferais un UPDATE qui ne change rien, genre
      ON DUPLICATE KEY UPDATE Nom=Nom
      0
    3. Utilisateur anonyme
       
      Après essai, ça a bien l'air de marcher.
      0
    4. coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   110
       
      Merci je test ça de suite !
      0
  2. coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   110
     
    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
    1. Utilisateur anonyme
       
      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
    2. coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   110
       
      Oui je viens de me rendre compte de la parenthèse à l'instant ...
      Je retest ça !
      0
  3. coxycross Messages postés 888 Date d'inscription   Statut Membre Dernière intervention   110
     
    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