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#

  1. #1
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    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
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    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
    Le Porc est un loup pour le Porc.

  3. #3
    Membre éprouvé 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
    Points : 1 108
    Points
    1 108
    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...
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    En C# je ne faisais plus ça, je ne sais plus pourquoi j'avais pris l'habitude d'utiliser le for
    Le Porc est un loup pour le Porc.

  5. #5
    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
    Points : 3 015
    Points
    3 015
    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);
            }
          }

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    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];

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    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 !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    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
    Le Porc est un loup pour le Porc.

  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
    Points : 3 015
    Points
    3 015
    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 émérite
    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
    Points : 2 498
    Points
    2 498
    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)
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  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 : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    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 ...).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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