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 requête SQL et la mettre dans une variable


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Points : 34
    Points
    34
    Par défaut Récupérer le résultat d'une requête SQL et la mettre dans une variable
    Bonjour à tous,

    Je fais une application en VB.NET avec une base Access 2010.
    Je voudrais mettre le résultat de ma requête SQL dans une variable mais je ne sais pas comment m'y prendre.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For j = 0 To dts.Tables("semaine").Rows.Count - 1
     
                    Dim varTypeSem As String = rd.GetString(dts.Tables("semaine").Rows(i).Item("TypeSem"))
                    secondSQL = "SELECT TypeSem FROM semaine WHERE noSemaine = varSemaine"
     
                    rd = cmd.ExecuteReader()
                    Do While rd.Read()
                        dtr("typeSemaine") = rd.GetString("TypeSem")
                    Loop
                Next
    Merci de votre aide

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Tu peux passer par ExecuteScalar.
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '...
    secondSQL = "SELECT TypeSem FROM semaine WHERE noSemaine = varSemaine"
    Dim cmd As New OleDbCommand(secondSQL , Taconnexion) 
    Dim obj As Object  
    obj = cmd.ExecuteScalar()
    MessageBox.Show(obj.ToString())

    En outre, mieux vaut adopter les bonnes pratiques en utilisant les requêtes paramétrées:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    '...
    secondSQL = "SELECT TypeSem FROM semaine WHERE noSemaine = ?varSemaine"
    Dim cmd As New OleDbCommand(secondSQL , Taconnexion) 
    Cmd.Parameters.AddWithValue("?varSemaine", TaValeur)
    Taconnexion.Open() 
    Dim obj As Object  
    obj = cmd.ExecuteScalar()
    MessageBox.Show(obj.ToString())

  3. #3
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    ce n'est pas plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     secondSQL = "SELECT TypeSem FROM semaine WHERE noSemaine = [varSemaine?] ;"

  4. #4
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par shayw Voir le message
    Bonjour

    ce n'est pas plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     secondSQL = "SELECT TypeSem FROM semaine WHERE noSemaine = [varSemaine?] ;"
    Non. En revanche, il semblerait que le fournisseur OLEDB.NET ne prend pas en charge les paramètres nommés pour passer des paramètres à une instruction SQL ou à une procédure stockée. Donc la bonne syntaxe devrait être (j'ai ajouté la clause using pour faire plus propre):
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim ConnString As String = "La chaine de connexion"
    Dim secondSQL  As String = "SELECT TypeSem FROM semaine WHERE noSemaine = ?"
    Using conn As New OleDbConnection(ConnString)
      Using cmd As New OleDbCommand(secondSQL, conn)
        cmd.CommandType = CommandType.Text
        cmd.Parameters.AddWithValue("noSemaine", LaValeur)
     
        conn.Open() 
        Dim obj As Object  
        obj = cmd.ExecuteScalar()
        MessageBox.Show(obj.ToString())
      End Using
    End Using
    Plus de détails ici.

  5. #5
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Même s'il ne les prend pas en charge, tu peux les nommer pour la lisibilité du codeur, seul l'ordre l'importe.

    Par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      req = "UPDATE Table SET CH_NOM= :nom, CH_PRENOM= :prenom"
     
    With updateCommand.Parameters
                        .Add(New OleDbParameter(":nom", OleDbType.BSTR))
                        .Add(New OleDbParameter(":prenom", OleDbType.BSTR))
    End With
     
    'Marche bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      req = "UPDATE Table SET CH_NOM= :, CH_PRENOM= :"
     
    With updateCommand.Parameters
                        .Add(New OleDbParameter(":nom", OleDbType.BSTR)) 'Remplira le 1er paramètre
                        .Add(New OleDbParameter(":prenom", OleDbType.BSTR)) 'Remplira le 2nd paramètre
    End With
     
    'Marche bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      req = "UPDATE Table SET CH_NOM= :Prenom, CH_PRENOM= :Nom"
     
    With updateCommand.Parameters
                        .Add(New OleDbParameter(":nom", OleDbType.BSTR)) ' Affectera :Prenom
                        .Add(New OleDbParameter(":prenom", OleDbType.BSTR)) 'Affectera :Nom
    End With
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      req = "UPDATE Table SET CH_NOM= :Nom, CH_PRENOM= :Prenom"
     
    With updateCommand.Parameters
                        .Add(New OleDbParameter(":prenom", OleDbType.BSTR)) 'Affectera :Nom
                        .Add(New OleDbParameter(":nom", OleDbType.BSTR)) ' Affectera :Prenom
    End With
    EDIT : L'exemple est avec le "deux-point (:)" mais c'est par réflexe d'Oracle, à remplacer par "?"

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en informatique
    Inscrit en
    Juillet 2013
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant en informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 102
    Points : 34
    Points
    34
    Par défaut
    Merci à tous pour vos aides,
    Je suis passé par un autre moyen mais vos conseils m'ont bien aidés.
    Voici le code final :
    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
    Dim varSemaine = frmBReeducateur.txtNoCalendarSemaine.Text
     
                For j = 0 To dts.Tables("semaine").Rows.Count - 1
                    secondSQL = "SELECT noSemaine, TypeSem FROM semaine"
                    Dim en As IEnumerator
                    en = dts.Tables("semaine").Rows.GetEnumerator
                    en.Reset()
                    Dim numSem As Integer
                    Do While en.MoveNext()
                        numSem = en.Current("noSemaine")
                        If varSemaine = en.Current("noSemaine") Then
                            dtr("typeSemaine") = en.Current("TypeSem")
                        End If
                    Loop
                Next

  7. #7
    Membre confirmé Avatar de Jabbal'H
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2004
    Messages : 403
    Points : 580
    Points
    580
    Par défaut
    Quelques truc qui me gène dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim varSemaine = frmBReeducateur.txtNoCalendarSemaine.Text
    C'est une chaine de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim numSem As Integer
    numSem = en.Current("noSemaine")
    C'est donc un entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If varSemaine = en.Current("noSemaine") Then
    Comparaison d'un entier et une chaine de carcatère, bon cast implicite

    Mais c'est surtout que tu charge la variable "numSem" pour ne jamais l'utiliser !
    Tu fais ton If sur le même appels pour charger la variable "numSem", tu fais donc deux appels à un dictionnaire alors que tu ne pourrais en faire qu'un.
    La différence de perf est probablement négligeable, mais c'est surtout que ça me pique à chaque fois les yeux lorsque je vois çà, c'est une mauvais pratique.

    Il faut faire attention à ne pas faire d'appels X fois à la même méthode qui te renverra de manière sur et certaine la même valeur.
    Pour ce cas, la différence de perf est négligeable, mais si tu manipule des Web service par exemple, tu fais la chasse à ce genre de chose, cela n'a l'air de rien, mais ça peut te bouffer pas mal de temps au final.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/02/2015, 10h46
  2. [Regex]récupérer la table dans une requête sql
    Par laedit dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 11/09/2009, 16h28
  3. Récupérer une variable calculée dans une requête SQL
    Par nanar1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/01/2009, 11h45
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  5. [SQL] Récupérer des variables de formulaire dans une requête SQL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/11/2005, 18h44

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