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

ASP.NET Discussion :

[c#] Compter les champs d'un DataReader


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut [c#] Compter les champs d'un DataReader
    Bonjour,

    Voilà jutilise un datareder et je voudrais compter le nombre le ligne de résultat que me renvoie ma requete. J'ai essayé avec un :
    où "ObjReader" est mon datareader, mais ça me renvoit systématiquement 0... pourquoi??

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    FieldCount donne le nombre de colonnes de la ligne en cours et non le nombre de lignes

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Salut,

    La propriété FieldCount te renvoie le nombre de colonnes de ton résultat et non pas le nombre de ligne. Si elle te renvoie 0 ça doit être par ce que tu l'interroges avant d'avoir fait un Read sur ton DataReader.

    Tu ne peux pas récupérer directement le nombre de lignes que te renvoie ta requete avec un DataReader, il faut les compter "a la main" dans la boucle qui parcours le DataReader.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    A ok merci, c'es donc pour ça que je comptais pas le nombre de ligne...!
    Mais en fait il a pb quand même puisque je suis sensée avoir 2 colonnes et ça m'affiche 1 ....
    Voici mon code:
    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
     
                            ObjConnect.Open();
                            OleDbCommand ObjCommand = new OleDbCommand("SELECT ICON_TITLE FROM dbo_ITEMOBJ", ObjConnect);
                            ObjReader = ObjCommand.ExecuteReader();
     
                            ObjColonne = new DataColumn ("Symbole");
                            ObjTable.Columns.Add(ObjColonne);
                            ObjColonne = new DataColumn ("Type de doc");
                            ObjTable.Columns.Add(ObjColonne);
     
                            while (ObjReader.Read())
                            {
                                ObjRow = ObjTable.NewRow();
                                int count = (ObjReader.FieldCount);
                                Response.Write(count);
                                for (i=0;i<(ObjReader.FieldCount-1);i++)
                                {
                                    ObjRow[i] = ObjReader.GetValue(i);
                                }
                                ObjTable.Rows.Add(ObjRow);
                            }
                            dg_ListeResultat.DataSource = ObjTable;
    Et pour le pb des lignes, au lieu de la boucle for, je peu mettre un
    ou quelque chose comme ça??

    Merci

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    je suis sensée avoir 2 colonnes et ça m'affiche 1
    Si ta requête est bien "SELECT ICON_TITLE FROM dbo_ITEMOBJ" alors je ne vois qu'une seule colonne de demandée : ICON_TITLE

    Et pour le pb des lignes, au lieu de la boucle for, je peu mettre un while...
    Je comprends pas bien la question, tu as déja un while qui te permet de compter le nombre de ligne dans le code que tu nous as donné, il suffit de faire :

    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
     
                            int NbLines = 0;
     
                            while (ObjReader.Read())
                            {
                                NbLines++;  
     
                                ObjRow = ObjTable.NewRow();
                                int count = (ObjReader.FieldCount);
                                Response.Write(count);
                                for (i=0;i<(ObjReader.FieldCount-1);i++)
                                {
                                    ObjRow[i] = ObjReader.GetValue(i);
                                }
                                ObjTable.Rows.Add(ObjRow);
                            }
    PS : je pense que tu as une erreur dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     for (i=0;i<(ObjReader.FieldCount-1);i++)
    La bonne condition est plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     for (i=0;i<ObjReader.FieldCount;i++)
    Enfin, en tout cas si tu veux recuperer les valeurs de tte tes colonnes...

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    A oui j'étais persuadée d'avoir remis les 2 champs dans ma requête donc qu'il devait y avoir 2 colonnes!
    Tu as raison pour le FieldCount-1, je l'ai supprimé aussi après avoir posté mon code.

    En tout cas beaucoup!!!!!

    Dernière chose... , normalement ce code permet de remplir une dataGrid (dg_ListeResultat) mais quand j'exécute mon code, rien ne s'affiche, pas même ma datagrid vide... Pourtant c'est bien la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dg_ListeResultat.DataSource = ObjTable;
    qui devrait la remplir non??

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Pour remplir ta DataGrid il te faut les deux lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dg_ListeResultat.DataSource = ObjTable;
    dg_ListeResultat.DataBind();
    Tu as bien mis le DataBind ?

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Non il était en commentaire...
    Ca marche mieux, enfin j'ai le nom de mes colonnes qui s'affiche mais toujours pas les valeurs...

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Est ce que tu as des lignes vides sans valeur dedans ou bien tu n'as aucune ligne qui s'affiche (a part le header) ?

    Si tu n'as aucune ligne dans ta DataGrid, vérifie bien que ta requete en renvoie qd meme, sinon c'est normal. Et si ta requete renvoie bien des lignes, alors essaye de faire un ObjTable.AcceptChanges avant de faire le DataBind, je n'en suis pas sur mais il est possible que ça joue.

    Si tu as des lignes vides dans ta DataGrid c'est que tu ne remplis simplement pas bien leur contenu, ou que la base te renvoie des valeurs null ou des chaines vides... Bref, faut débugger un peu

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Ben j'ai aucune ligne qui s'affiche mais en fait ça rentre plus dans ma boucle while... J'arrive pas à débugger ...

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    En fait si je mets une valeur dans ma requête:
    ça marche mais ça marche pas avec ma variable qui récupère ce que l'utilisateur a saisi. Pourtant cette variable n'est pas vide...

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Franchement il manque des informations pour te repondre

    Ben j'ai aucune ligne qui s'affiche mais en fait ça rentre plus dans ma boucle while...J'arrive pas à débugger ...
    comment ça ça ne rentre plus dans la boucle while ? ya pas de miracle, si ton code n'entre pas dans la boucle while, c'est que ta requete te renvoie rien, normal alors que tu n'ais pas de ligne. Dans ce cas vérifie que ta requete est bien celle que tu veux faire... Tu n'arrives pas a debugger, c'est à dire ?

    En fait si je mets une valeur dans ma requête:

    ICON_TITLE='2058777'
    Je comprends pas exactement ce que tu veux dire vu la requete que tu nous avais donné plus haut (il n'y a pas de clause WHERE il me semble).

    ça marche mais ça marche pas avec ma variable qui récupère ce que l'utilisateur a saisi. Pourtant cette variable n'est pas vide...
    De quoi parles-tu ?

    Bref, meme si en cherchant un peu on arrive a se faire une vague idée du probleme, ce serait plus simple si tu nous l'exposais clairement. Je te rappelle que nous ça fait pas une semaine qu'on bosse sur ton appli [/quote]

  13. #13
    Membre très actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Essaye un Count en SQL, au moins tu auras ton résultat

  14. #14
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Bon je vous redonne mon code au grand complet avec les dernière modif:
    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
     
                            ObjConnect.Open();
                            OleDbCommand ObjCommand = new OleDbCommand("SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE = 'RechecheSymbole'", ObjConnect);
                            ObjReader = ObjCommand.ExecuteReader();
     
                            ObjColonne = new DataColumn ("Symbole");
                            ObjTable.Columns.Add(ObjColonne);
                            ObjColonne = new DataColumn ("Type de doc");
                            ObjTable.Columns.Add(ObjColonne);
     
                            while (ObjReader.Read())
                            {
                                ObjRow = ObjTable.NewRow();
                                for (i=0;i<ObjReader.FieldCount;i++)
                                {
                                    ObjRow[i] = ObjReader.GetValue(i);
                                }
                                ObjTable.Rows.Add(ObjRow);
                            }
                            dg_ListeResultat.DataSource = ObjTable;
                            dg_ListeResultat.DataBind();
    Si, comme au dessus, je passe en paramètre une saisie utilisateur dans ma requête (RechercheSymbole), alors cette requête ne renvoie rien. Si en revanche je mets une valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE = '2058777'
    ca marche très bien, ma datagrid apparait.

    La variable que je souhaite intégrer à ma requête (RechercheSymbole) est une variable de session, j'ai vérifier, elle récupère correctement les données.

    Voilà j'espère que c'est plus clair, dsl et merci.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 59
    Par défaut
    On peut voir la requête RechercheSymbole ?

    Sinon, essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE in  (RechercheSymbole)"

  16. #16
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    On peut voir la requête RechercheSymbole ?
    C'est celle ci que tu veux??:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE = 'RechecheSymbole'
    Sinon je viens d'essayer avec le 'in' mais ça reviens au même, ya que le header de ma datagrid qui s'affiche...

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Bon j'essaye de comprendre,

    Tu exécutes une requete qui est :

    SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE = XXX
    Ou XXX est qque chose donné par l'utilisateur, ou bien '2058777' en dur pour tester. Qd tu testes avec cette valeur en dur, ta requete te renvoie bien des données et ta grid affiche bien les resultatd. Qd tu testes avec la valeur utilisateur tu ne récuperes plus de données, ta grid n'affiche plus rien (juste le header).

    Est ce que c'est ça ?


    Si oui, alors c'est simplement que dans ta base, il n'y a aucune donnée avec ICON_TITLE qui serait égal à la valeur fourni par l'utilisateur ! Il y aurait un probleme si la donnée utilisateur étant '2058777' tu ne recevais plus de résulat, mais la il n'y a rien d'anormal... J'ai pas du tout comprendre... Faut dire que c'est pas trés clair

  18. #18
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Ben pourtant t'as tout compris, ya pas plus que ce que tu as dit. Sauf que oui, quand je ne met pas ma valeur en dur dans ma requête, je saisie la même valeur au clavier, mais là, pas d'affichage, il est là le pb!

  19. #19
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Ah enfin, le probleme est cerné . Bon est ce que tu pourrais nous donner le code qui concatene le debut de ta requete avec ta variable de session ? Le vrai hein, celui que tu utilises, voir si ya pas un soucis. peux tu aussi en debuggant nous donner le résultat de cette concaténation, est ce que tu es sure que c'est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE = '2058777'
    Le prebleme vient à coup sur de ça. En particulier est ce que les guillemets simples y sont bien par exemple ?

  20. #20
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 107
    Par défaut
    Pourquoi qui concatène ? On peut pas tout mettre ensemble : requête + variable de session?
    Moi je récupère ma variable de session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string RechercheSymbole = Session["Symbole"].ToString();
    Et après j'utilise cette variable pour ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleDbCommand ObjCommand = new OleDbCommand("SELECT ICON_TITLE, CUSTOM03 FROM dbo_ITEMOBJ WHERE ICON_TITLE = 'RechercheSymbole'", ObjConnect);
    C'est pas bon??

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Compter les champs non-nuls sur un record
    Par rozwel dans le forum MySQL
    Réponses: 1
    Dernier message: 28/01/2009, 15h49
  2. Compter les champs avec iText
    Par reitsab dans le forum Documents
    Réponses: 0
    Dernier message: 03/10/2008, 16h19
  3. VBA-E Compter les champs d'une cellule
    Par porc-bouc dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/09/2007, 16h05
  4. Comment compter les champs identiques
    Par domik dans le forum Access
    Réponses: 6
    Dernier message: 28/01/2007, 20h26
  5. SQL : compter les champs d'une table
    Par Bboy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/10/2005, 16h02

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