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

Windows Forms Discussion :

Emboiter des DataReaders?


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut Emboiter des DataReaders?
    Bonjour,

    Je voudrais savoir s'il est possible d'emboiter des DataReaders.
    Voici mon code. Il y a un problème car il me dit
    Un DataReader associé à cette commande est déjà ouvert. Il doit d'abord être fermé.
    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
    
    public void RemplListCltAvecRef(string RefEnCours)
            {
                SqlDataReader DataReader1 = null;
                SqlDataReader DataReader2 = null;
    
                Lst_Clt.Items.Clear();
    
                string sql1 = "SELECT AKKNDI,AKARTK, AKARTN  FROM ARKF_ACTIF WHERE AKARTN = '" + RefEnCours + "'ORDER BY AKARTN";
                SqlCommand cmd1 = new SqlCommand(sql1, ConsultConnection);
                DataReader1 = cmd1.ExecuteReader();
    
                int NbreDeClientsPourPieceSelect; NbreDeClientsPourPieceSelect = 0;
                int PositionCltEnCours; PositionCltEnCours = 0;
    
                if (DataReader1.HasRows)
                {
                    while (DataReader1.Read())
                    {
                        string sql2 = "SELECT KNKNDI, KNKNDK, KNKNMN FROM KNDF WHERE KNKNDI = '" + DataReader1["AKKNDI"].ToString()  + "' ORDER BY KNKNDK";
                        SqlCommand cmd2 = new SqlCommand(sql2, ConsultConnection);
                        DataReader2 = cmd2.ExecuteReader();
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Là, je pense que le problème vient tout simplement de la requête : tu ne devrais pas être obligé d'utiliser deux DataReader pour obtenir ce que tu veux.
    Tu peux faire une sous-requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM myTable WHERE column IN (SELECT ....) ORDER BY column
    Je t'avoue que j'en ai pas fait depuis un bail, je ne te garantis donc pas la viabilité de ce code, mais l'idée est là

    Et sinon, n'oublie pas que tu peux te faciliter la vie de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int NbreDeClientsPourPieceSelect = 0;
    int PositionCltEnCours = 0;
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    c'est en effet contreperformant de faire ce que tu fais

    demande à google ce qu'est une jointure (INNER JOIN)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Ok je regarde ça tout de suite.

    Merci!

  5. #5
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    J'ai encore le même problème alors que je ferme mes DataReader.

    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
    
            public void RemplListCltAvecRef(string RefEnCours)
            {
                SqlDataReader DataReader1 = null;
    
                Lst_Clt.Items.Clear();
                 
                string sql1 = "SELECT AKKNDI,AKARTK, AKARTN, KNKNDI, KNKNDK, KNKNMN  FROM ARKF_ACTIF INNER JOIN KNDF ON ARKF_ACTIF.AKKNDI = KNDF.KNKNDI WHERE AKARTN = '" + RefEnCours + "'ORDER BY KNKNDK";
                SqlCommand cmd1 = new SqlCommand(sql1, ConsultConnection);
                DataReader1 = cmd1.ExecuteReader();
    
                int NbreDeClientsPourPieceSelect; NbreDeClientsPourPieceSelect = 0;
                int PositionCltEnCours; PositionCltEnCours = 0;
    
                if (DataReader1.HasRows)
                {
                    while (DataReader1.Read())
                    {
                         (...)
                    }
                DataReader1.Close();
                cmd1.Dispose();
            }
    
            public void RemplRefCltAvecCodeClt(string CodeCltEnCours, string RefEnCours)
            {
                SqlDataReader DataReader2 = null;
    
                string sql2 = "SELECT KNKNDI, KNKNDK, KNKNMN? AKKNDI,AKARTK, AKARTN FROM KNDF INNER JOIN ARKF_ACTIF ON KNDF.KNKNDI=ARKF_ACTIF.AKKNDI WHERE KNKNDK = '" + CodeCltEnCours + "' + AKARTN = '" + RefEnCours + "'ORDER BY KNKNDK";
                SqlCommand cmd2 = new SqlCommand(sql2, ConsultConnection);
                DataReader2 = cmd2.ExecuteReader();

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Tu as le même message d'erreur ?

    Au passage, il manque une '}' dans la première fonction après le while pour fermer le if.
    Et dans la requête de la 2° fonction, une virgule a été transformée en point d'interrogation.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  7. #7
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Oui c'est la même erreur.

    Merci pour d'avoir remarqué les petites boulettes lol

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faut un objet connection par reader, tu utilises tout le temps le meme
    il faut réellement en instancier un à chaque fois
    et fermer la connexion le plus tot possible


    sinon ton if (DataReader1.HasRows) doit servir à rien aussi ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Il est certain qu'il vaut mieux fermer la connexion le plus rapidement possible.

    Mais ayant déjà dû travailler avec des DataReaders et la connexion ouverte, je n'ai cependant pas eu ce genre d'erreurs...
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  10. #10
    Membre régulier Avatar de Chacha35
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 264
    Points : 114
    Points
    114
    Par défaut
    Daccord je tente ça.

    Merci

    ------------

    C'est bon ça marche super bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. parcours des donnees avec un datareader
    Par olibara dans le forum C#
    Réponses: 10
    Dernier message: 12/10/2011, 15h57
  2. Réponses: 2
    Dernier message: 30/08/2011, 18h30
  3. emboiter correctement des éléments div
    Par tanguy.L dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 16/11/2009, 10h50
  4. Réponses: 0
    Dernier message: 30/08/2008, 04h18

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