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

Accès aux données Discussion :

[C# 2.0] Comment récupérer le nombre de lignes d'un Select avec un OracleDataReader ?


Sujet :

Accès aux données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 26
    Points : 19
    Points
    19
    Par défaut [C# 2.0] Comment récupérer le nombre de lignes d'un Select avec un OracleDataReader ?
    J'ai fais une recherche mais n'ai pas trouvé de réponse à cet épineux sujet...

    J'ai récupéré sur le net une classe Oracle pour interroger la base de donnée au bureau.

    Je suis un peu choqué sur la manière de récupérer les résultats du OracleDataReader. Il ne semble exister aucun moyen de récupérer le nombre de résultats à la requête Select (par exemple pour afficher une barre de progression pour la récupération des données sur des jeux de données volumineux) ?

    La classe que j'ai trouvé effectue ceci :

    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 Object[,] getQueryResult(string sQuery)
            {
                this.oracleCmd = new OracleCommand(sQuery, this.oracleCnx);
                this.oracleReader = null;
                this.oracleReader = this.oracleCmd.ExecuteReader();
     
                Object[,] oArrResult;
                this.iNbRows = 0;
                this.iNbCols = this.oracleReader.FieldCount;
     
                // Initialisation du tableau de retour
                int a = this.oracleReader.RecordsAffected;
                while (this.oracleReader.Read()) { this.iNbRows++; }
                oArrResult = new Object[this.iNbRows, iNbCols];
     
                // Remplissage du tableau de retour
                try
                {
                    this.oracleReader = this.oracleCmd.ExecuteReader();
                    int i = 0;
                    while (this.oracleReader.Read())
                    {
                        for (int j = 0; j < this.iNbCols; j++)
                        {
                            oArrResult[i, j] = oracleReader.GetOracleValue(j);
                        }
                        i++;
                    }
                }
    ...
    }
    Deux choses donc :
    - on parcourt une première fois les résultats pour obtenir simplement le nombre de résultats (this.iNbRows++
    - on effectue deux fois la requête (this.oracleCmd.ExecuteReader()

    (et dernier point sensible -mais je crois que je ferais un autre post pour avoir votre avis- on utilise la fonction GetOracleValue qui a des perfs bien moindre que les autres accesseurs déjà typés Oracle, la question serait alors de savoir de quel type de donnée est le champ (j) dans mon code afin d'appeller le bon accesseur...)

    Les deux questions qui résultent de mon post :
    - Existe t'il un autre moyen d'avoir le nombre de résultats retournés par un SELECT (ex : par un Enumerator, je connais très mal les enumerators)
    - Y'a t'il un cache .Net des requêtes effectuées ou la requête est-elle réellement exécutée deux fois sur le serveur Oracle ???

  2. #2
    Invité
    Invité(e)
    Par défaut
    pour le nombre de resultat d'une requete tu as le COUNT(*).
    (SELECT COUNT(*) WHERE Condition)

  3. #3
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    - Existe t'il un autre moyen d'avoir le nombre de résultats retournés par un SELECT (ex : par un Enumerator, je connais très mal les enumerators)
    Le reader fonctionne en mode connecte, on ne peut savoir le nombre d'enregistrements renvoyes qu'au dernier read.

    - Y'a t'il un cache .Net des requêtes effectuées ou la requête est-elle réellement exécutée deux fois sur le serveur Oracle ???
    Il n'existe qu'un cache pour les connections, pas pour les requetes. Elle est donc executee deux fois

    La solution proposee par gcorbineau est la bonne

Discussions similaires

  1. Comment tester si un champ est un nombre
    Par the kikouyou dans le forum Langage SQL
    Réponses: 13
    Dernier message: 17/07/2014, 14h57
  2. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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