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

VB.NET Discussion :

Récupérer le résultat d'une requete dans une variable


Sujet :

VB.NET

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut Récupérer le résultat d'une requete dans une variable
    Bonsoir,
    Comment faire pour récupérer le résultat d'une requete dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    con.Open()
            Dim ol As New OleDb.OleDbDataAdapter("select nom from tab1 where login= '" & TextBox1.Text & "' and p= '" & TextBox2.Text & "'", con)
            Dim mr As New DataSet
            ol.Fill(mr)
     
    con.Close()
    merci

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 652
    Points : 2 180
    Points
    2 180
    Par défaut
    Il faut utiliser le DataSet qui est rempli par la requête.Si tu n'attends qu'un seul résultat de ta requête , il te faudra aller dans la première Table du dataset , et prendre la premiere valeur de la première Row.

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut
    Merci pour votre réponse mais malheureusement je n'ai pas compris ta proposition

  4. #4
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 652
    Points : 2 180
    Points
    2 180
    Par défaut
    Il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim resultat As Object() = mr.Tables(0).Rows(0).ItemArray
    Avec ce code , on récupère les valeurs de la requête , du moins le premier résultat.Les champs sont déjà avec le bon type .Si un champs était de type INT en SQL , il le sera aussi dans ItemArray , etc ...

    Si tu veux boucler sur tous les résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Dim resultat As Object()
     
    For i As Integer = 0 To mr.Tables(0).Rows.Count - 1
    		' ton travail pour chaque résultats de la requête
    	resultats = mr.Tables(0).Rows(i)
    Next
    J'ai utilisé un convertisseur C# => VB.Net , donc j'espère que tout est bon.

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Juste pour information, ce n'est pas une obligation, un dataCommand seul permet de récupérer une valeur d'une cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Using dc As New OleDb.OleDbCommand("select nom from tab1 where login= ? and p= ? ", con)
                dc.Parameters.Add("P1", OleDb.OleDbType.VarChar).Value = TextBox1.Text
                dc.Parameters.Add("P2", OleDb.OleDbType.VarChar).Value = TextBox2.Text
                Dim varNom = dc.ExecuteScalar
            End Using
    De plus, il faut TOUJOURS utiliser les requêtes paramétrées comme je l'ai fait, cela évite les injections SQL (sécurité) et c'est bien plus simple à gérer surtout quand on a des types complexes comme des dates.

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par Sankasssss Voir le message

    De plus, il faut TOUJOURS utiliser les requêtes paramétrées comme je l'ai fait, cela évite les injections SQL (sécurité) et c'est bien plus simple à gérer surtout quand on a des types complexes comme des dates.
    Ou quand il y a des apostrophes dans les chaînes de caractères.

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut
    Bonsoir,
    merci pour vos réponses
    Comment faire pour avoir ce boucle if parceque j'ai eu cet erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim resultat As Object() = mr.Tables(0).Rows(0).ItemArray
            If resultat = "Marie" Then
                ......................
            End If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    La résolution de surcharge a échoué, car aucun '=' accessible ne peut être appelé avec ces arguments*:
        'Public Shared Operator =(a As String, b As String) As Boolean': Une valeur de type 'Tableau à 1 dimension(s) de Object' ne peut pas être convertie en 'String'.
    merci

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    L'opérateur égal (=) ne permet pas de réaliser une égalité entre un type System.Object et un type System.String. Essaie comme ceci :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    If resultat.ToString() = "Marie" Then
    Mais si la variable resultat est NULL, tu vas lever une NullReferenceException, il faut donc au préalable vérifier que resultat contienne bien quelque chose.

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut
    J'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim resultat As Object() = mr.Tables(0).Rows(0).ItemArray
    Label1.Text = resultat.ToString()
    If resultat.ToString() = "Marie" Then
    mais le label contient

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Arf ok Je n'ai quasiment jamais utilisé de DataSet/DataTable, sauf quand je débutais, donc je laisse ceux qui connaissent te répondre...

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut
    En faisant une recherche j'ai trouvé que je peux utiliser recordset. Comment je peux faire ça? Cette solution est-elle utile? Et surtout qu'elle est la référence à ajouter
    merci

  12. #12
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Il y a plein de façon de faire.

    Le souci dans ton exemple précédent, c'est que la variable résultat est un tableau.

    Lorsque tu écris resultat.ToString() = "Marie", tu ne compares pas un élément du tableau en particulier au texte "Marie" mais bien le tableau complet. Il te faut prendre l'élément du tableau se trouvant à l'index contenant le texte à comparer.

    Mais tu devrais lire le cours de Mr. Lasserre (qui se trouve en post-it de ce forum). Tu y trouverais toutes les réponses que tu cherches.

  13. #13
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Arf ok Je n'ai quasiment jamais utilisé de DataSet/DataTable, sauf quand je débutais, donc je laisse ceux qui connaissent te répondre...
    T'as juste pas les yeux en face des trous pour ne pas voir que resultat est un tableau . Voilà ce que c'est que de répondre à 1h du matin... Faut aller dormir à la place :p

  14. #14
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut
    Bonjour,
    Merci J'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim da As New OleDb.OleDbDataAdapter("select nom from tab1 where login= '" & Connexion.TextBox1.Text & "' and p= '" & Connexion.TextBox2.Text & "'", cnn)
            Dim ds As New DataSet
            da.Fill(ds)
            Dim resultat As Object() = ds.Tables(0).Rows(0).ItemArray
            Dim N As Integer = resultat.Length
            For I = 0 To N-1
                If resultat(I).ToString() = "Marie" Then
                    Label1.Text = resultat.ToString()
                End If
            Next I
    Mais toujours j'obtiens meme résultat: le label contient


  15. #15
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Citation Envoyé par Marie_7 Voir le message
    Bonjour,
    Merci J'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim da As New OleDb.OleDbDataAdapter("select nom from tab1 where login= '" & Connexion.TextBox1.Text & "' and p= '" & Connexion.TextBox2.Text & "'", cnn)
            Dim ds As New DataSet
            da.Fill(ds)
            Dim resultat As Object() = ds.Tables(0).Rows(0).ItemArray
            Dim N As Integer = resultat.Length
            For I = 0 To N-1
                If resultat(I).ToString() = "Marie" Then
                    Label1.Text = resultat.ToString()
                End If
            Next I
    Mais toujours j'obtiens meme résultat: le label contient

    Oui et c'est normal. Tu testes bien si un élément du tableau contient le texte Marie mais tu mets tout ton tableau dans le texte du label... N'oublie pas de spécifier ton index I à ce moment-là également !

  16. #16
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 275
    Points : 70
    Points
    70
    Par défaut
    merciiiii ça marche maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Label1.Text = resultat(0).ToString()

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

Discussions similaires

  1. [MySQL] requete dans une table avec une varible d'une autre table
    Par kogoi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/11/2011, 15h24
  2. [MySQL] une requete dans une requete
    Par ots2 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/08/2011, 09h49
  3. Réponses: 4
    Dernier message: 02/07/2008, 11h32
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Utilisation d'une requete dans une requete update
    Par hellbilly dans le forum Access
    Réponses: 4
    Dernier message: 09/01/2005, 15h09

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