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 :

effectuer une requete sur le resultat d'un datareader tout en laissant celui ci ouvert


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 11
    Points
    11
    Par défaut effectuer une requete sur le resultat d'un datareader tout en laissant celui ci ouvert
    Bonsoir,
    je vous explique le problème que j'ai rencontré:

    On effectue une requete avec un datareader pour récupérer des informations en bases et on souhaite parcourir toutes les lignes, jusque la pas de soucis.
    On imagine derrière que l'objet en question possède un objet (exemple, une catégorie peut être sous catégorie)

    On souhaite donc récupérer les informations de la catégorie maître, j'effectue donc une requête imbriqué si l'id récupérer de la catégorie maître n'est pas nulle.

    A ce moment la, je fait un select qui n'a rien a voir avec le datareader pour récupérer le libelle de la catégorie parente, Je passe les détail car le problème s'effectue a ce point la:

    -le datareader est encore ouvert(car on a pas finit de parcours tous les éléments de la requête)
    -une deuxième requête est ouverte pour récupérer les informations correspondant a cette ligne la.

    ==> Le problème est que le débogger m'indique qu'il n'est pas possible de lancer la deuxième requête car le datareader est encore ouvert.
    Je n'est pas trouvé de solution alternative, si quelqu'un pouvait m'éclairer sur une solution alternative.


    Je reste a disposition pour plus d'informations et je vous remercie d'avance pour toute aide que vous pourrez me fournir

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    tu peux créer une autre commande dans laquelle tu peux exécuter ta requête mais sur un autre reader

    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
     
     using (DbCommand command = connection.CreateCommand())
                {
                    command.CommandText = "SELECT X FROM TOTO";
                    using (DbDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            using (DbCommand command2 = connection.CreateCommand())
                            {
                                //command2.CommandText = "SELECT COUNT(1) NB FROM TOTO WHERE X = @x";
                                command2.CommandText = "SELECT COUNT(1) NB FROM TOTO WHERE X = :x";
                                DbParameter prm = command2.CreateParameter();
                                //prm.ParameterName = "@x";
                                prm.ParameterName = ":x";
                                prm.DbType = DbType.String;
                                prm.Value = reader["X"];
                                command2.Parameters.Add(prm);
                                using (DbDataReader reader2 = command2.ExecuteReader())
                                {
                                    while (reader2.Read())
                                    {
                                        Console.WriteLine("{0} : {1}", reader["X"], reader2["NB"]);
                                    }
                                }
                            }
                        }
                    }
                }
    code extrait de lien

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Super, j'avais tenté quelque chose qui s'en rapprochait, mais de la façon dont je l'utilisait, une erreur était générée au deuxième reader, je te remercie pour l'exemple.

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

Discussions similaires

  1. Effectuer une requete sur un dataset
    Par Aurélien19 dans le forum C#
    Réponses: 7
    Dernier message: 25/09/2008, 15h17
  2. Requete avec une condition sur le resultat [10g]
    Par hotkebab99 dans le forum Oracle
    Réponses: 5
    Dernier message: 12/09/2006, 11h33
  3. Réponses: 2
    Dernier message: 31/05/2006, 09h47
  4. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06
  5. Execution d'une requete sur un resultat précédent
    Par Systemic7 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/08/2005, 14h43

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