IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème boucle imbriquée SqlDataReader


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut Problème boucle imbriquée SqlDataReader
    Bonjour,

    J'ai besoin d'effectuer plusieurs boucles imbriquées mais celle-ci ne fonctionnent pas. Je crois avoir cernée le problème mais je ne sais pas le résoudre. SqlDataReader on ne peut être utiliser que si le précèdent est fermé. Mais je ne sais pas comment lire les requête autrement.

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    private void (string requete1, string requete1_bis, string requete_Insertion_, string code_athlete, string mdp, string id_athlete, string bdd_idathlete, string server_idathlete, string utilisateur_idathlete, string pwd_idathlete, string id, string mp, string requete_verif)
            {
                //recupération du ID_athlete de la table athlete :
                // Chaine de connexion
                try
                {
     
                    string connectString = "database='" + bdd_idathlete + "'; server='" + server_idathlete + "';User ID='" + utilisateur_idathlete + "'; pwd='" +pwd_idathlete + "'";
                    // Objet connection
                    SqlConnection connection = new SqlConnection(connectString);
     
                    connection.Open();// Ouverture
                    //TRI IMPRIMANTE
     
     
                    requete1 = "SELECT * FROM imprimante WHERE code_athlete is not null AND mdp_athlete is not null";
            // Création d'un objet SqlDataAdapter
                    SqlCommand Command = new SqlCommand(requete1, connection);
                    SqlDataReader dex = Command.ExecuteReader();
     
                    while (dex.Read())
                    {
                        code_athlete = dex["code_athlete"].ToString();
                        mdp = dex["mdp_athlete"].ToString();
     
                        requete_verif = "SELECT * FROM  ";
                        SqlCommand verif_ = new SqlCommand(requete_verif, connection);
                        SqlDataReader verif_dex = verif_.ExecuteReader();
     
                        while (verif_dex.Read())
                        {
                            id = verif_dex["LOGIN_"].ToString();
                            mp = verif_dex["MDP_"].ToString();
                            Console.WriteLine(id + "--" + mp);
                            if ((id != code_athlete) && (mp != mdp))
                            {
     
                                requete1_bis = "SELECT id_athlete FROM athlete WHERE code_athlete ='" + code_athlete + "'";
                                SqlCommand insert_ = new SqlCommand(requete1_bis, connection);
                                //// Objet DataReader
                                Console.WriteLine(requete1_bis);
                                SqlDataReader dex_bis = insert_.ExecuteReader();
                                while (dex_bis.Read())
                                {
                                    Console.WriteLine(requete1_bis);
     
                                    id_athlete = dex_bis["id_athlete"].ToString();
     
                                    requete_Insertion_ = "INSERT INTO  VALUES('" + id_athlete.Replace("'", "''") + "','" + code_athlete.Replace("'", "''") + "','" + mdp.Replace("'", "''") + "') ";
                                    Console.WriteLine(requete_Insertion_);
                                    SqlCommand insert = new SqlCommand(requete_Insertion_, connection);
                                    insert.ExecuteNonQuery();
                                    insert.Dispose();
                                }
                                dex_bis.Close();
                            }
                        } verif_dex.Close();
                     }
                    dex.Close();
     
                    connection.Close();
                }
    PS: J'ai testé les requêtes elles fonctionnent

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Il te manque quelque chose là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete_verif = "SELECT * FROM  ";

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Il te manque ton nom de table dans ton insert into
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete_Insertion_ = "INSERT INTO  VALUES('" + id_athlete.Replace("'", "''") + "','" + code_athlete.Replace("'", "''") + "','" + mdp.Replace("'", "''") +

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Sa ne marche toujours pas. Le problème vient que le sqldatareader doit etre fermé avant d'être réutiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    private void (string requete1, string requete1_bis, string requete_Insertion_, string code_athlete, string mdp, string id_athlete, string bdd_idathlete, string server_idathlete, string utilisateur_idathlete, string pwd_idathlete, string id, string mp, string requete_verif)
            {
                //recupération du ID_athlete de la table athlete :
                // Chaine de connexion
                try
                {
     
                    string connectString = "database='" + bdd_idathlete + "'; server='" + server_idathlete + "';User ID='" + utilisateur_idathlete + "'; pwd='" +pwd_idathlete + "'";
                    // Objet connection
                    SqlConnection connection = new SqlConnection(connectString);
     
                    connection.Open();// Ouverture
                    //TRI IMPRIMANTE
     
     
                    requete1 = "SELECT * FROM imprimante WHERE code_athlete is not null AND mdp_athlete is not null";
            // Création d'un objet SqlDataAdapter
                    SqlCommand Command = new SqlCommand(requete1, connection);
                    SqlDataReader dex = Command.ExecuteReader();
     
                    while (dex.Read())
                    {
                        code_athlete = dex["code_athlete"].ToString();
                        mdp = dex["mdp_athlete"].ToString();
     
                        requete_verif = "SELECT * FROM athlete ";
                        SqlCommand verif_ = new SqlCommand(requete_verif, connection);
                        SqlDataReader verif_dex = verif_.ExecuteReader();
     
                        while (verif_dex.Read())
                        {
                            id = verif_dex["LOGIN_"].ToString();
                            mp = verif_dex["MDP_"].ToString();
                            Console.WriteLine(id + "--" + mp);
                            if ((id != code_athlete) && (mp != mdp))
                            {
     
                                requete1_bis = "SELECT id_athlete FROM athlete WHERE code_athlete ='" + code_athlete + "'";
                                SqlCommand insert_ = new SqlCommand(requete1_bis, connection);
                                //// Objet DataReader
                                Console.WriteLine(requete1_bis);
                                SqlDataReader dex_bis = insert_.ExecuteReader();
                                while (dex_bis.Read())
                                {
                                    Console.WriteLine(requete1_bis);
     
                                id_athlete = dex_bis["id_athlete"].ToString();
     
                                    requete_Insertion_ = "INSERT INTO athlete VALUES('" + id_athlete.Replace("'", "''") + "','" + code_athlete.Replace("'", "''") + "','" + mdp.Replace("'", "''") + "') ";
                                    Console.WriteLine(requete_Insertion_);
                                    SqlCommand insert = new SqlCommand(requete_Insertion_, connection);
                                    insert.ExecuteNonQuery();
                                    insert.Dispose();
                                }
                                dex_bis.Close();
                            }
                        } verif_dex.Close();
                     }
                    dex.Close();
     
                    connection.Close();
                }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Voilà ma suggestion

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while (dex_bis.Read())
                                {
                                    Console.WriteLine(requete1_bis);
     
                                id_athlete = dex_bis["id_athlete"].ToString();
     
                                    requete_Insertion_ = "INSERT INTO athlete VALUES('" + id_athlete.Replace("'", "''") + "','" + code_athlete.Replace("'", "''") + "','" + mdp.Replace("'", "''") + "') ";
                                    Console.WriteLine(requete_Insertion_);
                                    SqlCommand insert = new SqlCommand(requete_Insertion_, connection);
                                    insert.ExecuteNonQuery();
                                    insert.Dispose();
                                }
                                dex_bis.Close();
    Fait tes insert en une seule fois en utilisant un stringbuilder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    System.Text.StringBuilder sb = new StringBuilder();
    ...
    while (dex_bis.Read())
     {
         sb.AppendLine("INSERT INTO athlete VALUES('" + id_athlete.Replace("'", "''") + "','" + code_athlete.Replace("'", "''") + "','" + mdp.Replace("'", "''") + "'); ");
    }
    dex_bis.Close();
    ...
    ...
    SqlCommand insert = new SqlCommand(sb.ToString(), connection);
                                    insert.ExecuteNonQuery();
    connection.Close();

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par xouzi
    Le problème vient que le sqldatareader doit etre fermé avant d'être réutiliser.
    Tu as la réponse à ton problème, tu ne peux pas procéder ainsi. Tu dois donc modifier ton code de manière à ne plus avoir d'imbrication et donc plus de problèmes

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Mais je vois pas comment je peux faire vue que mes requêtes s'exécutent par rapport au résultat des requêtes précédentes.
    Sinon il faudrait que je récupérai le résultat des requêtes dans un tableau mais je pense qu'il y a mieu.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Petite note au passage tu peux remplacer tes values par des paramètres. Ça t'assure une syntaxe sql correcte et un protection contre des hackers si c'est pour un site web.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     sb.AppendLine("INSERT INTO athlete VALUES('" + id_athlete.Replace("'", "''") + "','" + code_athlete.Replace("'", "''") + "','" + mdp.Replace("'", "''") + "'); ");
    SqlCommand insert = new SqlCommand(sb.ToString(), connection);
                                    insert.ExecuteNonQuery();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sb.AppendLine("INSERT INTO athlete VALUES(@id_athlete,@code_athlete,@mdp); ");
    SqlCommand insert = new SqlCommand(sb.ToString(), connection);
                                    insert.ExecuteNonQuery();
    SqlCommand.Parameters.AddWithValues("@id_athlete",id_athlete);
    SqlCommand.Parameters.AddWithValues("@code_athlete",code_athlete);
    SqlCommand.Parameters.AddWithValues("@mdp",mdp);
    Ton code sera plus lisible.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Ok merci. Mais je sais toujours pas comment empecher les boucle imbriquer. il y a rien pour remplacer sqldatareader.

  10. #10
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par xouzi Voir le message
    Sinon il faudrait que je récupérai le résultat des requêtes dans un tableau mais je pense qu'il y a mieu.
    En quoi ce ne serait pas bien ?

    Par contre je comprends mal ce que tu veux faire, car faire un SELECT d'un enregistrement d'une table pour récupérer son ID afin d'insérer un autre enregistrement dans la même table et avec le même ID, ça me semble étrange

    Tu pourrais expliquer simplement ce que tu cherches à faire ? ^^

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Tu dois prendre 2 requêtes sql et en faire qu'une seule avec un inner join sur ton code_athlete et une condition where sur imprimante.mdp <> athelte.mdp

    Tu auras qu'un datareader.

  12. #12
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Une jointure aiderait probablement. Et suivant ce qu'il cherche à faire on peut peut-être même faire sans DataReader, c'est pour ça que j'aimerais savoir ce qu'il veut faire ^^

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    La client peut avoir plusieurs login et mot de passe. Car plusieurs commerciaux peuvent avoir leur mot de passe.
    c'est pour sa que j'insère id pour le mot de passe et le login

  14. #14
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Ce que tu veux faire c'est que si tu ne trouves pas dans la table Athlete un enregistrement avec les mêmes code/mot de passe que dans la table Imprimante tu crées un enregistrement dans Athlete ? C'est bien ça ? Si tu es dans ce cas de figure ça peut se faire sans utiliser de DataReader, en requête pure.

    En tout cas je comprends mal ton code (ou alors c'est que j'en tiens une couche ce soir ) et ton INSERT avec un ID qui existe déjà me chiffonne beaucoup. A moins que le champ id_athlete ne soit pas la clé primaire, mais j'en doute vu le nom.

    Au pire tu peux donner un exemple avec ce que tu as en entrée au début (tes deux tables avec quelques enregistrements) et ce que tu dois avoir à la fin (le contenu de la table Athlete après traitement). Ce sera plus simple pour bien comprendre ce que l'on attend du traitement. A partir de là il ne devrait plus y avoir d'équivoques et on pourra te conseiller la meilleure solution, ou tout du moins quelque chose qui fonctionne ^^

    La seule chose à faire c'est de revoir l'algorithme de toute façon pour ne pas avoir de boucle soit en se limitant à un seul DataReader (une requête en jointure pour récupérer les données nécessaires) soit en stockant les données entre temps pour les requêtes suivantes.

    De plus tu passes beaucoup de paramètres à la méthode (notamment des requêtes) mais tu redéfinis ces requêtes par la suite. A ce moment tu devrais supprimer ces paramètres pour déclarer des variables locales plutôt.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Enfaite je masquer un peu mon code pour diverse raison, (nom de base de donnée, champs etc...)

    Je t'explique
    • J'ai un fichier excel qui est tenu a jour et qui répertorie différente donnée de matériel et autre.


    • Ce fichier est insérer dans une table (imprimante).


    • requete1: Il me faut trier cette table. Je souhaite récupérer le login et le mdp ainsi que l'id client qui correspond. Le fichier possède des cellule #valeur ce qui explique les is not null dans la requete


    • Je souhaite vérifier qu'il ne sont pas deja présent dans la table ce qui explique la requete_verif


    • Celon le résultat Je récupère l'id du client correspondant au login et au mdp


    • Puis la requete d'insertion insert les l'id le login le mdp s'il n'est pas deja existant


    Pas trop perdu?
    Si quelqu'un aurait un tuto pour récupérer les résultat d'une requete dans un tableau je suis preneuse

  16. #16
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    On avance ^^

    Seul truc qui coince encore c'est l'id client donc tu parles. Car dans ton code tu récupères un id_athlete et tu insères un enregistrement dans la même table avec ce même id ensuite. Comme il s'agit probablement de la clé primaire cela me semble bizarre car cela ne peut pas fonctionner. Mais c'est peut être juste une erreur dans le code puisque tu n'as pas pu aller jusque là étant bloqué par l'imbrication des DataReader.

    Je peux te donner un début de solution, à adapter un peu mais ça devrait pas être loin de ce que tu veux. Pour ça il faut faire une requête avec jointure, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT I.code, I.mdp, A.id, A.login, A.mdp 
    FROM Imprimante I
    LEFT JOIN Athlete A ON A.login = I.code AND A.mdp = I.mdp
    Avec cette requête tu récupères les code/mdp de la table imprimante et en lien les données de la table athlete. Si on ne trouve pas d'athlete avec même code et mot de passe que dans imprimante alors A.id, A.login et A.mdp seront null (jointure ouverte).

    On rajoute une clause WHERE par dessus et tu auras l'ensemble des code et mot de passe présents dans Imprimante mais pas Athlete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT I.code, I.mdp
    FROM Imprimante I
    LEFT JOIN Athlete A ON A.login = I.code AND A.mdp = I.mdp
    WHERE A.id IS NULL
    A adapter au niveau de la jointure suivant ton besoin. Si tu as un logiciel pour tester les requêtes (Management Studio Express ou autre) tu peux voir si cela correspond à ce que tu attends.

    Ensuite tu parcours le résultat de la requête avec un DataReader et tu mets de côté les requêtes pour les insertions qu'il faudra réaliser (une liste de chaînes de caractères). Ensuite tu fermes le DataReader et tu passes à l'insertion des données.

    Si ça colle alors ce traitement peut être fait en requête pure, sans DataReader (INSERT INTO d'un SELECT). On verra ça après si c'est le cas ^^

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Donc en gros je recupere tout les login et les mot de passe dans la table imprimante qui ne sont pas dans la table athlete et qui ne sont pas null dans imprimante ?
    J'utilise rarement des left join

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT I.code_client, I.mdp_client
    FROM Imprimante I
    LEFT JOIN dexxon A ON A.login_dexxon = I.code_client AND A.mdp_dexxon = I.mdp_client
    WHERE I.code_client is not null
    AND I.mdp_client is not null

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Magnifique mon code est rellement simplifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    private void xed(string requete_xed, string requete_xed_bis, string requete_Insertion_xed, string code_client, string mdp, string id_client, string bdd_idclient, string server_idclient, string utilisateur_idclient, string pwd_idclient, string id, string mp, string requete_verif)
            {
                //recupération du ID_CLIENT de la table CLIENT :
                // Chaine de connexion
                try
                {
     
                    string connectString = "database='" + bdd_idclient + "'; server= '" + server_idclient + "';User ID='" + utilisateur_idclient + "'; pwd='" + pwd_idclient + "'";
                    // Objet connection
                    SqlConnection connection = new SqlConnection(connectString);
     
                    connection.Open();// Ouverture
                    //TRI IMPRIMANTE
     
                    // On selectionne le code_client le mot de passe de la table imprimante qui ne sont pas dans la table xed et qui ne sont pas nul
                   	requete_xed = "SELECT I.code_client, I.mdp_client FROM Imprimante I LEFT JOIN xed A ON A.login_xed = I.code_client AND A.mdp_xed = I.mdp_client WHERE I.code_client is not null AND I.mdp_client is not null";
                    // Création d'un objet SqlDataAdapter
                    SqlCommand Command = new SqlCommand(requete_xed, connection);
                    SqlDataReader dex = Command.ExecuteReader();
     
                    while (dex.Read())
                    {
                       code_client = dex["code_client"].ToString();
                       mdp = dex["mdp_client"].ToString();
     
                       requete_xed_bis = "SELECT id_client FROM client WHERE code_client ='" + code_client + "'";
                       SqlCommand insert_xed = new SqlCommand(requete_xed_bis, connection);
                       //// Objet DataReader
                       Console.WriteLine(requete_xed_bis);
                       SqlDataReader dex_bis = insert_xed.ExecuteReader();                 
     
                                while (dex_bis.Read())
                                {
                                    Console.WriteLine(requete_xed_bis);
     
                                    id_client = dex_bis["id_client"].ToString();
     
                                    requete_Insertion_xed = "INSERT INTO xed VALUES('" + id_client.Replace("'", "''") + "','" + code_client.Replace("'", "''") + "','" + mdp.Replace("'", "''") + "') ";
                                    Console.WriteLine(requete_Insertion_xed);
                                    SqlCommand insert = new SqlCommand(requete_Insertion_xed, connection);
                                    insert.ExecuteNonQuery();
                                    insert.Dispose();
     
     
                                }
                                dex_bis.Close();                       
     
                    }
                    dex.Close();
     
                    connection.Close();
                }
                catch {
     
                }
            }
    La 2eme requete requete_xed_bis permet de recupérer l'id du client et non son code la clef primaire de la table xed est la concaténation du mdp et du login id_client et juste une clef etrangére
    Maintenant il reste plus qu'a trouver un moyen pour les select ne face qu'une requete

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Bonjour,
    Je te suggère plutôt d'attaquer le problème en passant par une procédure ou une fonction SQL.
    C'est super simple à mettre en oeuvre, et tu pourras faire autant de SELECT et INSERT que tu veux, si j'ai bien compris ce que tu veux faire.

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    c'est a dire que si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (xxx.read()){
     
        procedure(champs_prcedure)
     
    }xxx.close();
    et que dans dans procedure J'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Procédure(champs procedure)
    While (yyy.read())
    {
     
     
    }
    Ca va marcher ???

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problémes de Boucles imbriquées
    Par claude_tech dans le forum Débuter
    Réponses: 11
    Dernier message: 13/06/2011, 12h57
  2. Problème boucle while imbriquée dans autre boucle while
    Par nattydreadnatty dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2010, 14h58
  3. [XSLT] problème de boucle imbriquée en xsl/xpath
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2009, 18h30
  4. problème de syntaxe dans des boucles imbriquées
    Par deglingo37 dans le forum Access
    Réponses: 2
    Dernier message: 01/09/2006, 14h46
  5. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo