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

Windows Forms Discussion :

[VB.NET] DataReader: case par case


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut [VB.NET] DataReader: case par case
    bonjour!

    j'ai une question bete, mais comment parcourir mon datareader case par case?
    sachant que je ne connais pas son nombre de lignes/colonnes?

    j'ai essayer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While lst.Read
                    For i = 0 To lst.FieldCount
                        'traitement
                    Next
                    j = j + 1
                End While
    lst est mon datareader bien sur!

    et en fait il me sors
    Invalid attempt to Read when reader is closed.
    Merci!

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    do while dr.read
    for i = 0 to dr.fieldcount - 1
    'traitement
    next
    loop
    dr.close()

  3. #3
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    ça me fait la meme erreur

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 56
    Points : 64
    Points
    64
    Par défaut
    euh... tu l'as ouvert ton DataReader ? T'aurais pas oublié de faire un ExecuteReader() :

  5. #5
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    d'après ton erreur le problème viens que tu n'as pas ouvert ton DataReader.
    Edit : Moah l'a déjà dit pas grave

  6. #6
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    en tout cas j'ai réussi à remplir un datagrid avec
    je le fias pour vérifier qu'il y a quelque chose dedans.
    pour le execute reader, je sias pas trop, car j'utilise une classe faites par mes collègues, que je connais mal. mais elle a toujours marché

    voilà mon code exact (ligne est ma requète sql)
    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
     Dim connectionStringOP = AppSettings("connectionStringOP")
                Dim oSQL As SQLClass = New SQLClass(connectionStringOP)
                Dim lst As SqlDataReader
                lst = oSQL.SQL_GET(ligne)
                'Affichage temporaire
                CType(AgendaExcel1.FindControl("DGEve"), DataGrid).DataSource = lst
                CType(AgendaExcel1.FindControl("DGEve"), DataGrid).DataBind()
     
                'ouverture fichier excel et mise à jour
                classeur = appExcel.Workbooks.Open(Server.MapPath("/OpDotNet/Eplug/Reporting/template_Excel/vide.xls"))
                feuille = classeur.ActiveSheet
                Dim i, j As Integer
                i = 0
                j = 0
                Do While lst.Read
                    For j = 0 To lst.FieldCount - 1
                        feuille.Cells(i, j) = lst.Item(j)
                    Next
                    i += 1
                Loop
                appExcel.Visible = True
                lst.Close()

  7. #7
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    ils doivent faire l'ExecuteReader dans SQL_GET alors.
    Le problème est résolu ou pas????

  8. #8
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    non non il est pas résolu!
    j'ai eu confirmation l'executereader est bien fait dans le SQL_GET()

    merci de votre interet!

  9. #9
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    je viens de voir un truc : Read est une méthode et non une propriété je crois donc tu dois l'appeler avec des parenthèse et non pas seule :

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 166
    Points : 144
    Points
    144
    Par défaut
    Salut

    l'erreur d'execution arrive a quel moment dans ta boucle ?

  11. #11
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    salut!
    pour lst.Read, étant en vb, il se fiche des parenthèses normalement... mais je vais quand meme essayer!

    euh pour la boucle ça c'est une bonne question: un ou deux tests et je te dis ça!

    [réponse] ben dès le premier coup mon i vaut 0 au moment de l'erreur [/réponse]

  12. #12
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Citation Envoyé par prem's
    pour lst.Read, étant en vb, il se fiche des parenthèses normalement
    prend l'habitude de les mettre parce que si tu change unjour de langage tu va t'arracher les cheveux.

  13. #13
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    c'est vrai tu as raison, mais bon disons que étant "qu'en stage" et continuant l'année prochaine, sans l'intention de continuer spécialement en vb, je m'en préoccupe pas trop... à tort surement d'ailleurs!!!!!!

    sinon ben je les ai rajoutées, mais rien de plus!

  14. #14
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    tu peux nous montrer ton erreur en entier et où elle arrive exactement :


    PS : (c'est tout con mais plus rapide à écrire )

  15. #15
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    eheh sau fque vb connait pas i++ ....

    enfin bon voilà mon erreur:
    System.InvalidOperationException: Invalid attempt to NextResult when reader is closed. at System.Data.SqlClient.SqlDataReader.NextResult() at OpenPortal.Services.Reporting.TestAgenda.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\OpDotNet\Eplug\Reporting\Test\TestAgenda.aspx.vb:line 70
    euh pour là j'ai essayer avec un lst.nextResult() au lieu du lst.Read()
    mais ça reviens au meme niveau erreur.....

  16. #16
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    non mais ton problème viens pas de là, il vient de lst qui n'est pas ouvert.
    tu as essayé de regarder dans SQL_GET et de voir si tu peux pas placer en paramètre de retour le ExecuteReader :
    Car ton prob viens d'ici c'est clair.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Autre théorie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CType(AgendaExcel1.FindControl("DGEve"), DataGrid).DataSource = lst
    CType(AgendaExcel1.FindControl("DGEve"), DataGrid).DataBind()
    Le DataGrid est un peu obligé de faire le tour du DataReader pour la liaison. Et vu que c'est du forward-only, c'est un peu normal que ça coince quand on veut refaire une boucle dessus ensuite.

    Et vu que lier un DataReader à un DataGrid (ou à quoi que ce soit d'autre) mérite la pendaison : passe par une DataTable. Tu pourras la lier et faire toutes les boucles que tu veux dessus, et ça ne bloquera pas la connexion inutilement.

  18. #18
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    C'est laquelle la ligne 70?

  19. #19
    Membre habitué Avatar de prem's
    Inscrit en
    Avril 2003
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 145
    Points : 152
    Points
    152
    Par défaut
    voilà j'ai fini par trouvé!! et maniak aussi....

    en effet, ce quise passait, c'est que mon datareader était parcouru pour remplir mon datagrid, et qu'après, le curseur était à la fin... donc plus moyen de le reparcourir.

    comme mon datagrid n'est que temporaire je l'ai enlevé et ça marche (enfin presque maintenant j'ai une autre erreur mais plus par rapport à ça!! )

    MERCI beaucoup les gens

    PS: la ligne 70 : "while lst.Read()"

  20. #20
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par Maniak
    Et vu que lier un DataReader à un DataGrid (ou à quoi que ce soit d'autre) mérite la pendaison : passe par une DataTable. Tu pourras la lier et faire toutes les boucles que tu veux dessus, et ça ne bloquera pas la connexion inutilement.
    J'savais meme pas qu'on pouvait passer un DataReader comme Source d'un DataGrid...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/01/2015, 10h18
  2. Acceder à une page ASP.NET sans passer par la case Login
    Par ehochedez dans le forum ASP.NET
    Réponses: 8
    Dernier message: 07/10/2010, 11h28
  3. Réponses: 2
    Dernier message: 05/09/2007, 17h00
  4. [XSLT] Créer un tableau HTML en fixant le nombre de cases par ligne
    Par kingmandrax dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 03/07/2006, 17h07
  5. Réponses: 4
    Dernier message: 04/03/2005, 12h27

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