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 :

Problème avec data reader


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Problème avec data reader
    Bonjour à tous,

    J'ai une variable de type Array que j'essaye de remplir avec un DataReader.

    Je vais essayer de m'expliquer:
    J'ai une table T_mdp (user_nom [string], user_id [int32], mdp [string])

    Je voudrais mettre dans un Array les champs mdp et user_id.
    voilà 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
    Dim MyConnexion As OleDbConnection = New OleDbConnection(ConnectionString)
            Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
            strSQL = "SELECT T_mdp.mdp, T_mdp.user_id " & _
                         "FROM T_mdp " & _
                         "WHERE T_mdp.user_nom='Username'"
            Mycommand.CommandText = strSQL
            MyConnexion.Open()
            Dim Reader As OleDbDataReader = Mycommand.ExecuteReader()
            Dim arrResult(2)
            For i = 1 To 2
                If Reader.Read() Then
                    arrResult(0) = True
                    arrResult(i) = Reader(i - 1)
                Else
                    If Not arrResult(0) = True Then arrResult(0) = False
                End If
            Next
            Reader.Close()
            MyConnexion.Close()
    J'arrive à remplir le mdp, mais il mets la valeur Null pour le user_id, l'Array reste donc (True, mdp, Null), et je ne compreds pas pourquoi, car le champs est bien rempli sur la table.

    Est-ce que quelqu'un pourrait m'aider, svp?
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Pour tester, j'ai changé l'ordre de mon SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    strSQL = "SELECT  T_mdp.user_id, T_mdp.mdp " & _
                         "FROM T_mdp " & _
                         "WHERE T_mdp.user_nom='Username'"
    et maintenant je retrouve bien l'user_id, mais pas le mdp!

    Il y a donc un problème pour trouver la dernière valeur.

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Ta boucle est un peu bizarre car quand tu fais Reader.Read, cela déclenche la lecture de la ligne suivante du Reader.

    Donc comme ton select ne rend qu'une seule ligne ça ne le fait pas du tout !

    D'ailleurs, si je comprends ce que tu veux faire, tu n'as pas besoin du For :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            Dim Reader As OleDbDataReader = Mycommand.ExecuteReader()
            Dim arrResult(2)
            If Reader.Read() Then
               arrResult(0) = True
               arrResult(1) = Reader(0)
               arrResult(2) = Reader(1)
            Else
               arrResult(0) = False
            End If
            Reader.Close()
    Devrait suffire.

    Cdt.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Merci olsimare,

    Je suis heureux de te dire que je commence a me débrouiller un peu avec du vb... (très peu pour l'instant, mais c'est déjà quelque chose )

    J'ai besoin du for, car j'ai mis 2 comme un exemple, dans mon application j'utilise n. Il faudrait faire l'inverse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Reader.Read() Then
                For i = 1 To 2
                    arrResult(0) = True
                    arrResult(i) = Reader(i - 1)
                Next
                Else
                    If Not arrResult(0) = True Then arrResult(0) = False
                End If
    Je m'explique:
    Pour n'avoir pas besoin d'écrire le code du data reader toutes les fois, j'ai fait la fonction suivant:
    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
        Public Function MyReader(ByVal strCon As String, ByVal intNumber As Int16, ByVal strSQL As String) As Array
            Dim MyConnexion As OleDbConnection = New OleDbConnection(strCon)
            Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
            Mycommand.CommandText = strSQL
            MyConnexion.Open()
            Dim Reader As OleDbDataReader = Mycommand.ExecuteReader()
            Dim arrResult(intNumber)
            If Reader.Read() Then
                For i = 1 To intNumber
                    arrResult(0) = True
                    arrResult(i) = Reader(i - 1)
                Next
            Else
                If Not arrResult(0) = True Then arrResult(0) = False
            End If
            Reader.Close()
            MyConnexion.Close()
            Return arrResult
        End Function
    et toutes les fois où j'ai besoin d'un data reader, je fais, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strSQL = "SELECT T_mdp.user_nom " & _
                     "FROM T_mdp LEFT JOIN T_log ON T_mdp.user_id=T_log.user_id " & _
                     "ORDER BY T_log.dernier_log DESC"
            arrReader = MyReader(ConnectionString, 1, strSQL)
    (intNumber c'est la quantité des champs du SELECT)
    Après, j'utilise la première position du vecteur pour savoir s'il y a eu des résultats dans ma requête...

    Tu pense que c'est un bon méthode?

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Concernant le fait que cela soit la bonne méthode, j'utilise plutôt un dataset pour faire ce genre de truc plutôt qu'un datareader, mais pourquoi pas, si cela convient...

    Par contre, passer le nombre de colonne est inutile, tu peux utiliser le datareader.FieldCount pour obtenir le nombre de colonne retourné.

    D'autre part, si tu veux vraiment que ton code soit réutilisable, tu devrais créér une classe qui met à dispo non seulement les différents item, mais également une propriété indiquant que la requête a bien retourné quelque chose.

    Cdt.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Ok, merci pour l'astuce...

    Comment j'avias dit, je commence à me débrouiller maintenant, je peux voir que j'ai un long parcours à faire...

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

Discussions similaires

  1. problème avec le reader
    Par zilien974 dans le forum VB.NET
    Réponses: 14
    Dernier message: 09/06/2011, 17h22
  2. Probléme avec DATA liaison avec une base de données
    Par patbold dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/03/2011, 10h28
  3. Problème avec Excel Reader.php
    Par CapErquy dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 23/02/2011, 16h43
  4. Problème avec Adobe Reader 8
    Par Lanny dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 30/06/2008, 00h18
  5. Problème avec Adobe Reader.
    Par JavaAcro dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 04/02/2008, 22h05

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