Chaque ligne égale à la Requete ou non

Résolu/Fermé
dylan_garrix Messages postés 64 Date d'inscription mardi 21 juillet 2015 Statut Membre Dernière intervention 2 février 2018 - Modifié le 24 juil. 2017 à 20:02
 max - 26 juil. 2017 à 10:36
Bonjour, comme il est indiqué dans le Titre , j'ai une sorte de TextBox multilines d'ou je dois rentre plusieurs références et en cliquand sur le boutton sa m'affiche dans un tableau le "nomArticle" et " CodeArticle" .
et si un des réf n'existe pas dans la base bah il m'affiche juste la réference dans un autre tableau.
j'ai fais une sorte de Boucle ligne par ligne et m'affiche a chaque fois
Je vous montre un peu le code :
  protected void Button1_Click(object sender, EventArgs e)
        {
            Con.Open();

            DataTable dt = new DataTable();


            //char delimiter = '\n';
            //string[] substrings = search.Text.Split(delimiter);


            string[] delimiteur = { Environment.NewLine }; // "\r\n" retour chariot ! 
            string[] lignes = search.Text.Split(delimiteur, StringSplitOptions.RemoveEmptyEntries);//cette option à l'avantage de virer les lignes vides.


            List<Resultat> res = new List<Resultat>();

            foreach (var substring in lignes)

                 {

                SqlDataAdapter SDA1 = new SqlDataAdapter("SELECT NOMARTICLE,CODEARTICLE from woork  Where Ref_Art='" + substring + "'", Con);
                
               
                SDA1.Fill(dt);
                res.Add(new Resultat { NomArticle = (dt.Rows[0].Field<string>(0)), CodeArticle = dt.Rows[0].Field<string>(1), Ref_Art = substring });
               

            }

           
       GridView1.DataSource = dt;

            GridView1.DataBind();
            Con.Close();
        }


Ce que je veut faire c'est de tester chaque ligne et si la réference existe alors afficher sinon afficher dans un autre tableau.

ce qui donne un peu sa !

            DataTable dt = new DataTable(); // Table Ref existe dans la Base
     DataTable dnt = new DataTablee (); // Table Ref non existe dans la Base

foreach ( var Substring in Lignes ) 
 {
 if ( Substring = existe ) 
 {
  SqlDataAdapter SDA1 = new SqlDataAdapter("SELECT NOMARTICLE,CODEARTICLE from woork  Where Ref_Art='" + substring + "'", Con);
               
                SDA1.Fill(dt);
                res.Add(new Resultat { NomArticle = (dt.Rows[0].Field<string>(0)), CodeArticle = dt.Rows[0].Field<string>(1), Ref_Art = substring });
  }
 else 
 {
 SqlDataAdapter SDA1 = new SqlDataAdapter("SELECT NOMARTICLE,CODEARTICLE from woork  Where Ref_Art='" + substring + "'", Con);
               
                SDA1.Fill(dnt);
                res.Add(new Resultat { NomArticle = (dt.Rows[0].Field<string>(0)), CodeArticle = dt.Rows[0].Field<string>(1), Ref_Art = substring });
 }
 }

Aider moi a faire le Test If ( ligne = existe ) ou n'importe quel autre solution

Merci .

2 réponses

Utilisateur anonyme
24 juil. 2017 à 20:06
Bonsoir

dans la discussion précédente, je t'avais dit que finalement, la liste ne te sert pas.
donc cette ligne
res.Add(new Resultat { NomArticle = (dt.Rows[0].Field<string>(0)), CodeArticle = dt.Rows[0].Field<string>(1), Ref_Art = substring });
n'a plus lieu d'être.
Et la classe Resultat, peut être supprimée.


Pour ta question, une solution est de conserver le nombre de lignes dans le datatable et s'il n'a pas changer c'est que la référence n'existe pas
0
dylan_garrix Messages postés 64 Date d'inscription mardi 21 juillet 2015 Statut Membre Dernière intervention 2 février 2018 2
25 juil. 2017 à 10:10
moi j'ai fais une autre foreach comme sa juste je galère pour la condition un peu je sais pas comment l'écrire :
0
Utilisateur anonyme
25 juil. 2017 à 11:20
Je sais le faire avec Linq sur des collections, mais pas avec des datatable.
Il y a sans doute moyen de savoir si une requête ne retourne rien, mais j'ai pas trouvé.

Là tu travailles sur quelques références, mais imagine que tu doivent traiter 10 000 références, avec 2 foreach, tu vas faire 20 000 requêtes, et là le temps d'exécution va s'en ressentir.
Quand on peut faire une seule boucle, il faut le privilégier.

Ceci réponds à ton besoin (tapé de tête)
            List<string> Inconnus = new List<string>();
            int nombreLignes =0;

            foreach (var substring in lignes)

                 {

                SqlDataAdapter SDA1 = new SqlDataAdapter("SELECT NOMARTICLE,CODEARTICLE from woork  Where Ref_Art='" + substring + "'", Con);
                
               
                SDA1.Fill(dt);
               
                 if( nombreLignes == dt.Rows.Count)
                            Inconnus.Add(substring)
                 else 
                        nombreLignes = dt.Rows.Count;
            }

           
       GridView1.DataSource = dt;

            GridView1.DataBind();
            
            GrdiView2.DataSource = Inconnus;


0
dylan_garrix Messages postés 64 Date d'inscription mardi 21 juillet 2015 Statut Membre Dernière intervention 2 février 2018 2 > Utilisateur anonyme
25 juil. 2017 à 11:37
oui sa marche parfait merci beaucoup t'es un génie ! tu peut m'expliquer quelques trucs dedans pour comprendre comment ta fais :
1 ) List<string> Inconnus = new List<string>();
2 ) if( nombreLignes == dt.Rows.Count)
Inconnus.Add(substring)
else
nombreLignes = dt.Rows.Count;
0
Utilisateur anonyme
25 juil. 2017 à 11:56
Et bien je crée un entier liste de string vide.
Si le nombre de lignes dans le datatable est le même qu'avant, y a pas eu de changement donc la référence est inconnue, je la mets dans la liste.
A l'inverse, s'il y a eu une nouvelle ligne, je réactualise la variable pour la prochaine référence
0
dylan_garrix Messages postés 64 Date d'inscription mardi 21 juillet 2015 Statut Membre Dernière intervention 2 février 2018 2
25 juil. 2017 à 14:23
d'accord merci
0
pourtant me semble que l'algo est faux non ?
tu as essayé avec une ref connu, une inconnue, une connu, une inconnu ?

dans ce cas me semble pas que sa fonctione

max
0
dylan_garrix Messages postés 64 Date d'inscription mardi 21 juillet 2015 Statut Membre Dernière intervention 2 février 2018 2
26 juil. 2017 à 09:30
Oui sa marche parfaitement, Un connu il me le met dans la Table Connu et un non Connu il me le met dans la Table non connu
0
max > dylan_garrix Messages postés 64 Date d'inscription mardi 21 juillet 2015 Statut Membre Dernière intervention 2 février 2018
Modifié le 26 juil. 2017 à 10:38
Ok ok en faisant tourner l'algo dans ma tete j'ai l'impression qu'avec 4 ref : une connue, une inconnue, une connue, une inconnu ca marchais pour les 2 premières et ensuite pas pour les 2 dernières ... mais si tu dis que tu est ok je me plante surment.

max
0