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

ADO.NET Discussion :

gérer un reader vide [Débutant]


Sujet :

ADO.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut gérer un reader vide
    Bonjour à tous,
    Je n'arrive pas tester si mon reader est vide ou pas.
    Voici mon code actuel :
    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
    Do While myReader.Read()
                    ' récupération de l'item dans le reader
                    If myReader.Item(0) Is System.DBNull.Value Then
                        MsgBox("inconnu")
                        TextBox2.Text = "Inconnu" 'nom patrimonial
                        TextBox3.Text = "Inconnu" 'nom marital
                        TextBox4.Text = "Inconnu" 'prénom
                        TextBox6.Text = "Inconnu" 'sexe
                        TextBox5.Text = "Inconnu" 'ddn
                    Else
                        TextBox2.Text = StrConv(myReader.GetString(2), VbStrConv.Uppercase) 'nom patrimonial
                        TextBox3.Text = StrConv(myReader.GetString(1), VbStrConv.Uppercase) 'nom marital
                        TextBox4.Text = StrConv(myReader.GetString(3), VbStrConv.ProperCase) 'prénom
                        TextBox6.Text = myReader.GetString(5) 'sexe
                        TextBox5.Text = myReader.GetDateTime(4) 'ddn
                    End If
                Loop
    ça ne marche pas --> les lignes de commande placées après le If ne semblent jamais s'exécuter.
    J'ai également essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not myReader.HasRows
    sans succès...

    Une idée ?

    Bonne journée

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Tchebichef Voir le message
    si mon reader est vide ou pas
    ca dépend ce que tu entends par là
    ton if test si la valeur est nulle, pas si une ligne a été retournée
    c'est par contre le role de myreader.read mais il me semble que do while rentre forcément une fois dans le code, ce qui serait alors le défaut de ton code
    il faut mieux oublier le do while et faire juste un while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while myreader.read /// .read se positionne sur la ligne suivante (ou la première) et retourne false s'il n'y a pas ou plus de ligne
     
    end while
    si la condition est fausse au début il n'exécute même pas le code inclus dans la boucle
    le hasrows doit fonctionner aussi à ce moment
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Merci pour ta réponse.
    J'ai donc mis un while - end while à la place du do while - loop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    While myReader.Read()
                    ' récupération de l'item dans le reader
                    If Not myReader.HasRows Then MsgBox("Patient inconnu") _
                      : myReader.Close() : MyConnexion.Close() : Exit Sub
                    TextBox2.Text = StrConv(myReader.GetString(2), VbStrConv.Uppercase) 'nom patrimonial
                    TextBox3.Text = StrConv(myReader.GetString(1), VbStrConv.Uppercase) 'nom marital
                    TextBox4.Text = StrConv(myReader.GetString(3), VbStrConv.ProperCase) 'prénom
                    TextBox6.Text = myReader.GetString(5) 'sexe
                    TextBox5.Text = myReader.GetDateTime(4) 'ddn
               End While
    Mais ça ne fonctionne toujours pas.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 120
    Points : 77
    Points
    77
    Par défaut
    Problème réglé.
    Il faut tester le reader avant de lancer le .Read
    Code qui fonctionne :
    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
     
    Dim myReader As OracleDataReader = Mycommand.ExecuteReader()
                ' lecture du reader
                If myReader.HasRows = True Then
                    Do While myReader.Read()
                        ' récupération de l'item dans le reader
                        TextBox2.Text = StrConv(myReader.GetString(2), VbStrConv.Uppercase) 'nom patrimonial
                        TextBox3.Text = StrConv(myReader.GetString(1), VbStrConv.Uppercase) 'nom marital
                        TextBox4.Text = StrConv(myReader.GetString(3), VbStrConv.ProperCase) 'prénom
                        TextBox6.Text = myReader.GetString(5) 'sexe
                        TextBox5.Text = myReader.GetDateTime(4) 'ddn
                    Loop
                Else
                    MsgBox("Patient inconnu")
                    TextBox2.Text = "Inconnu" 'nom patrimonial
                    TextBox3.Text = "Inconnu" 'nom marital
                    TextBox4.Text = "Inconnu" 'prénom
                    TextBox6.Text = "Inconnu" 'sexe
                    TextBox5.Text = "Inconnu" 'ddn
                    TextBox1.Text = ""
                    TextBox1.Focus()
                End If
                ' fermeture du reader
                myReader.Close()
    Bonne journée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Gérer un paramètre vide?
    Par Zipper963 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 14/12/2012, 16h44
  2. Réponses: 16
    Dernier message: 21/12/2010, 09h31
  3. Gérer les string vides avec CXF
    Par PNL dans le forum Services Web
    Réponses: 0
    Dernier message: 24/03/2009, 12h18
  4. Gérer les espace vide dans un fichier texte
    Par barbuslex dans le forum C++
    Réponses: 2
    Dernier message: 29/05/2008, 15h01
  5. [DOS] Gérer une variable vide
    Par Bahan dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 13/12/2007, 11h30

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