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 :

parcours des donnees avec un datareader


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut parcours des donnees avec un datareader
    Bonjour

    Habituellement j'utilise un DataAdapter pour charger une DataTable


    Mais dans le cas present je dois lire des tables de plusieurs centaines de millier de ligne et un datareader sera plus approprié pour un parcours séqentiel des données

    Malheureusement je n'ai aucune experience avec cet engin.
    Je me demande quelle est la meilleure maniere d'effectuer les opération fondamentales suivante a partir du DataReader

    Connaitre le nombre de colonnes
    OK : myreader.FieldCount
    Connaitre le nombre de Row
    ?? : il faut tout parcourir je suppose
    Connaitre le type des colonnes
    ?? : dtr.GetSchemaTable(); ou autre chose ??
    Parcourir les donnes de chaque ligne
    OK : une boucle de 0 à FieldCount;

    Merci de vos suggestion

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Pour le datareader tu fais à chaque passage dans la boucle (qui va de 0 à nombre de lignes -1) un datareader.read que tu affecte à un datarow.
    Tu obtiens donc une ligne de données
    Tu peux accéder à chaque cellule de la ligne par row(nom champs sql) ou row(index champs SQL)
    Pour le nombre de ligne c'est dr.rows.count

  3. #3
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Pour le datareader tu fais à chaque passage dans la boucle (qui va de 0 à nombre de lignes -1)
    Tu fais une boucle ça va aussi bien.

    Tu as une prop HasRow pour savoir si le reader a des lignes...

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    En C# je ne faisais plus ça, je ne sais plus pourquoi j'avais pris l'habitude d'utiliser le for

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Pour le datareader tu fais à chaque passage dans la boucle (qui va de 0 à nombre de lignes -1)
    Inutile de prendre le nombre de lignes (comme déjà dit), la méthode Read renvoi false quand il n'y a plus de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(myreader.HasRows)
    {
    while(myreader.Read())
    {
    ...
    }
    }
    un datareader.read que tu affecte à un datarow.
    Pas utile, on peut accéder directement aux colonnes de la ligne courante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myreader["NomColonne"];
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myreader[ordinalColonne];

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Voilà mes souvenirs se réveillent, j'avais de mon côté besoin de récupérer la ligne à part, je devais donc l'affecter à un datarow, et c'était donc plus pratique de faire un "for" que de faire un "while" en réaffectant en + ma ligne

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Je ne comprend peut-être pas exactement ce que tu veux faire, mais pour moi, tu n'as pas besoin de connaitre le nombre de colonnes, le nombre de lignes ainsi que le type des colonnes ?
    Quand tu sélectionnes tes données, tu sais ce que tu veux en général.

    Du coup un code comme celui-ci peut faire l'affaire pour remplir une structure
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
          List<MonObjet> lst = new List<MonObjet>();
          using (OracleDataReader reader = cmd.ExecuteReader()) {
            while (reader.Read()) {
              int i = 0;
              monObjet= new MonObjet();
     
              monObjet.Propriete1 = reader.GetInt32(i++);
              monObjet.Propriete2 = reader.GetDateTime(i++);
              monObjet.Propriete3 = reader[i] == DBNull.Value ? 0 : reader.GetInt32(i); i++;
              ...
     
              lst.Add(monObjet);
            }
          }

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par binoo Voir le message
    Quand tu sélectionnes tes données, tu sais ce que tu veux en général.
    Et bien NON justement !

    On me donne une table dbf brute et je doix extraire les données pour manipulation exterieure

    Donc je pars d'un select * a partir d'un connecteur odbc et puis je navigue aux instruments !

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par olibara
    Et bien NON justement !

    On me donne une table dbf brute et je doix extraire les données pour manipulation exterieure

    Donc je pars d'un select * a partir d'un connecteur odbc et puis je navigue aux instruments !
    En effet, j'avais pas compris

  10. #10
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    merci tout le monde

    Bon et pour les colonnes ce n'est a mon avis pas GetSchemaTable
    Mais aussi un parcours avec

    MyReader.GetName(i)
    MyReader.GetFieldType(i)

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par olibara Voir le message
    merci tout le monde

    Bon et pour les colonnes ce n'est a mon avis pas GetSchemaTable
    Mais aussi un parcours avec

    MyReader.GetName(i)
    MyReader.GetFieldType(i)
    Le GetSchemaTable te fournit des infos plus complétes (aliasing, précision, etc ...).

Discussions similaires

  1. Parcours des Grid avec un foreach
    Par totodof dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 12/03/2010, 12h56
  2. lecture d'un xml - parcours des donnees
    Par stujava dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 05/06/2009, 17h22
  3. Modifier des donnees avec DBGrid ?
    Par msuire dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/12/2006, 00h58
  4. Importer des donnees avec fichier txt
    Par flOZ dans le forum Requêtes
    Réponses: 8
    Dernier message: 21/04/2006, 17h26
  5. [SimpleXML] XML et parcours des noeuds avec foreach
    Par kult dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/11/2005, 15h36

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