Requete sql visual studio c# retourne plusieurs fois la même
Résoluptisephy Messages postés 74 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bonjour,
j'ai un programme c# qui prend un fichier en entrée et qui dois me créer un fichire excel en sortie.
Dans mon programme, j'execute une requete sql, mais dans le fichier excel en sortie, j'ai plusieurs fois la même ligne, je ne sais pas si je m'y prend bien dans mon programme c# pour faire ma requete sql, voici mon code :
repexc = folderBrowserDialog2.SelectedPath + "\\monfichier" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xlsx"; -........ ......... //sirens est un tableau avec une liste de sirens try { MySqlCommand cmd = new MySqlCommand(); for (int a = 0; a < sirens.Count; a++) { marequete = " select t1.NUMSIR , " + //1 "t1.CCOD, " + "t0.MONtant, " + "t0.SOLDAT, " + "t0.ADHFER, " + //5 "t1.numeroadh, " + "t1.fichier, " + "t1.RAISO2, " + "t1.RAISOC, " + "date_format(t1.debutdate, '%m/%d/%Y') , " + //10 "t1.FINDATe, " + "t1.DATRECe, " + "t1.EMITOTale, " + "t2.EMILIBelle, " + "t2.EMIBASe, " + "t2.EMICOE, " + //16 "t2.EMINETe, " + "t2.EMICOTisation, " + "t2.EMIMT, " + "t3.ENCTOTale, " + //20 "t3.ENCDEB, " + "t3.ENCFIN " + " from 000pf t0 " + " left join Table001 t1 on t1.NUMSIR = t0.NUMSIR " + //rajout " left join Table002 t2 on t1.NUMSIR = t2.NUMSIR and t1.NOMFIC = t2.NOMFIC " + " left join Table003 t3 on t3.NUMSIR = t2.NUMSIR " + " where t0.numsir = " + sirens[a] + "" + " and t1.NOMFIC = '" + fichierEnEntrée + " '"; ; cmd = new MySqlCommand(marequete, conn); monreader = cmd.ExecuteReader(); if (monreader.Read()) //while { //premier reader ws.Cells[cptCol, 1] = ReturnReaderValue(monreader, 0); ws.Cells[cptCol, 2] = ReturnReaderValue(monreader, 1); ws.Cells[cptCol, 3] = ReturnReaderValue(monreader, 2); //SOLMON ws.Cells[cptCol, 4] = ReturnReaderValue(monreader, 3); //SOLDAT ws.Cells[cptCol, 5] = ReturnReaderValue(monreader, 4); //ADHFER ws.Cells[cptCol, 6] = ReturnReaderValue(monreader, 5); //MATADH ws.Cells[cptCol, 7] = ReturnReaderValue(monreader, 6); //NOMFIC ws.Cells[cptCol, 8] = ReturnReaderValue(monreader, 7); //RAISO2 ws.Cells[cptCol, 9] = ReturnReaderValue(monreader, 8); //RAISOC ws.Cells[cptCol, 10] = ReturnReaderValue(monreader, 9); //DEBDAT ws.Cells[cptCol, 11] = ReturnReaderValue(monreader, 10); //FINDAT ws.Cells[cptCol, 12] = ReturnReaderValue(monreader, 11); //DATREC //rajout ws.Cells[cptCol, 13] = ReturnReaderValue(monreader, 12); //EMITOT ws.Cells[cptCol, 14] = ReturnReaderValue(monreader, 13); //EMILIB ws.Cells[cptCol, 15] = ReturnReaderValue(monreader, 14); //EMIBAS ws.Cells[cptCol, 16] = ReturnReaderValue(monreader, 15); //EMICOE ws.Cells[cptCol, 17] = ReturnReaderValue(monreader, 16); //EMINET ws.Cells[cptCol, 18] = ReturnReaderValue(monreader, 17);//EMICOT ws.Cells[cptCol, 19] = ReturnReaderValue(monreader, 18);//EMIMT ws.Cells[cptCol, 20] = ReturnReaderValue(monreader, 19); //ENCTOT ws.Cells[cptCol, 21] = ReturnReaderValue(monreader, 20); //ENCDEB ws.Cells[cptCol, 22] = ReturnReaderValue(monreader, 21); //ENCFIN cptCol++; } else { // ws.Cells[cptCol, 1] = sirens[a]; // cptCol++; } mabarre.PerformStep(); log.Info("compteur :" + compteur); compteur++; lblres.Text = compteur.ToString(); monreader.Close(); monreader.Dispose(); cmd.Dispose(); }//fin for .... .... ws.SaveAs(repexc, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
j'ai également joints un fichire excel avec le resultat que j'obtiens en jaune et des lignes en vert, résultat que je dois avoir.
Normalement il doit parcourir les éléments de ma base et me récupérer des valeurs différentes, mais par exemple, pour un siren donnée, il me multiplie ma ligne.
j'ai l'impression qu'il garde les mêmes données quand j'appele ma requete sql dans mon programme.
Vous trouverez un exemple de fichier excel sur le lien suivant :
https://www.cjoint.com/c/LIvh2sidLDZ
merci beaucoup
Merci pour votre aide.
Windows / Chrome 105.0.0.0
- Requete sql visual studio c# retourne plusieurs fois la même
- Visual c++ 2019 - Guide
- Ecran retourne - Guide
- Telecharger fl studio 20 pour pc gratuit complet - Télécharger - Édition & Montage
- Visual paradigm - Télécharger - Gestion de données
- Photofiltre studio - Télécharger - Retouche d'image
6 réponses
bonjour,
Dans l'exemple que tu donnes, est-ce que ce sont les résultats complets?
Bien le bonjour,
nous c'est un fichire test, pour illustrer que le résultat apparait en doublon.
Exemple:
dans mon fichier en entrée, de 50 lignes, j'ai un numéro de siren toute les 10 lignes, mon programme enregistre dans un tableau les 10 sirens, jusque là c'est tout bon:
123456...
989878..
323232..
789....
321....
6544...
32121...
121212..
3232...
3232...
Mais quand j'execute ma requete, dans mon fichier excel, j'ai :
123456...
123456...
123456...
123456...
989878..
989878..
989878..
323232..
323232..
323232..
789....
789....
789....
(des lignes en double)
alors que quand je compare avec la base de données, je devrait avoir, meme si j'ai 4 lignes pour un siren données, toutes des données différentes :
123456... entreprise 1 750€
123456...entreprise 1 70€
123456...entreprise 1 520€
123456... entreprise 1 1750€
989878..entreprise 2 88€
989878..entreprise 2 818€
989878..entreprise 2 9388€
etc....
j'ai l'impression qu'en faisant un (if(monreader.read(....) dans mon for, il doit n'arrive pas à reprendre les autres données de la base ...
Le if, en effet, ne reprend qu'une ligne suite à chaque requête.
que signifie "j'ai un numéro de siren toute les 10 lignes"?
Quel est le lien entre ton fichier d'entrée, et les quatre tables t0, t1, t2, et t3?
Combien de lignes dans ton tableau sirens?
Combien de lignes dans ton Excel?
Essaie d'être précis, de donner des faits précis.
Utilise peut-être un exemple avec moins de données.
bonjour,
donc dans mon fichier, il y a des lignes/
DEBECOTT DEBI7815469832 FR10FR ACOSS DT1DT 65980049800024 ENTREPRISE DUPONT DT2 37050049800024 MR1MR 66652315300038 VILLE AEE5E 78861779305653 URSSAF DE LILLE ET TR AE3 GEDFDF00401-20222044 711 E165DF7050049DF54024
et ça se repete, il n'y a que le siren 37050049800024 et d'autres données qui change.
Le programme parcour le fichier en entrée et va chercher ce siren 37050049800024 puis les autres et les enregistre dans : List<String> sirens = new List<String>();
Admetons que j'ai un fichiers texte 18 lignes ( 2 fois le nombre de ligne que j'ai mis en exemple) , on aura donc 2 sirens d'enregistrés dans le tableau.
J'ai rejoué mon programme, avec un fichier en entrée de 182 lignes, il m'a trouvé 13 sirens et le fichier de sortie contient 13 lignes.
Pour les sirens , il m'a trouvé les numero suivants :
7 fois le numero 123456
5 fois le numero 789654
1 fois le numero 123698
j'ai regardé mon fichier exl généré en sorti et je n'ai pas la ligne avec le numero 123698.
Chaque colonnes des 7 lignes avec le numero 123456 sont identiques ...
De plus :
mon programme après avoir récupéré les sirens, je souhaite faire, pour chaque siren de ma liste, ma requete, mo nreader et j'enregistre le resutlat dans mon fichier excel à la suite et à la fin, je créé mon fichier excel, mais effectivement cela doit être à cause de mon if.
Toutefois, le soucis, c'est que je parcours ma liste sirens avec une boucle for et je n'arrive pas à faire mon while de ce fait.
Est ce que selon vous , je dois enlever le for pour faire mon while ?
merci beaucoup.
Alors logiquement il va me mettre les 7 lignes dans mon fichier excel, car dans la base de données, pour le numero de siren 123456, dans l'une de mes tables, j'ai 7 lignes ( je viens de faire une recherche avec le numero de siren ) avec d'autres données différentes, les une des autres, mais on dirait qu'il boucle sur le 1er résultat qu'il a trouvé, est ce que vous voyez où je veux en venir?
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour,
désolé pour le temps de réponse, finallement j'ai réussi, j'ai modifié ma boulce for et au lieu de faire :
if (monreader.Read()) //while {
j'ai fais un :
while (monreader.Read()) {
J'avais également un manque d'information en amont (...), j'ai bien paramétré les clefs primaires et mon programme est plus fluide.
Merci beaucoup.