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 :

Recuperer valeur d'un OleDbDataReader dont on sait qu'il n'a qu'un élément


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Par défaut Recuperer valeur d'un OleDbDataReader dont on sait qu'il n'a qu'un élément
    Bonjour,

    Je souhaite ajouter une "Localite" à ma BDD access. Cette dernière génère l'ID, il me faut donc récupérer celui-ci.

    Voici 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
    Dim con As New OleDb.OleDbConnection
            Dim cmd As New OleDb.OleDbCommand
            Dim dr As OleDbDataReader
            con.ConnectionString = ModuleGeneral.cheminBDD
            con.Open()
            cmd = New OleDbCommand("insert into Localite(ID_Pays,CP,Denomination) values(" & ID_Pays & "," & CP & ",'" & NomComune & "')", con)
            cmd.ExecuteNonQuery()
            cmd = New OleDbCommand("SELECT ID_Localite FROM Localite WHERE ID_Pays = " & ID_Pays & " AND CP = " & CP & " AND Denomination ='" & NomComune & "'", con)
            dr = cmd.ExecuteReader()
            While dr.Read
                Me.ID_Localite = dr("ID_Localite")
            End While
     
            con.Close()
            listeLocalite.Add(Me)
            MsgBox("Localité correctement ajoutée")
    Etant donné qu'il n'y a qu'une localite repondant aux critères de recherches, me suis dit, récupéront la valeur de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ID_Localite = dr("ID_Localite")
    cependant il faut l'entourer de while.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While dr.Read
                Me.ID_Localite = dr("ID_Localite")
            End While
    Pourquoi ? Y a t'il moyen d'éviter les while ? Faut-il utiliser autre chose que OleDbDataReader lorsqu'on on ne recupère pas un enregistrement mais juste une valeur ? Une alternative pour récupérer l'ID ?

    Merci beaucoup !

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tu te pose en effet la bonne question.
    Le DataReader n'a pas d'intérêt pour récupérer un seul enregistrement.

    Utilise plutôt la fonction ExecuteScalar dont ton objet dbcommand.

    D'autre part, dans ta requête, n'utilise pas de concaténation de chaînes. Elles sont non sécurisées et source d'erreurs.
    Passe par des requêtes paramétrées.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 24
    Par défaut
    Merci pour executeScalar !!

    Par contre tu développer "Elles sont non sécurisées et source d'erreurs" ?

    Merci !

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    De rien

    En ce qui concerne les requêtes "non paramétrées".
    Elles sont source d'erreur parce que la concaténation à base de "&", de quotes, etc., lorsqu'elles sont courtes, ça passe encore, mais dés que tu commences à avoir de longues requêtes le risque d'erreur est élevé. Sans compter les possibles guillemets et apostrophes dans les string utilisées, qui ne seront pas gérés.

    Enfin, concernant la sécurité, les requêtes non paramétrées sont sensibles à l'injection SQL.
    En utilisant des requêtes paramétrées, ton SGBD sait se protéger de ce type d'attaque.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/05/2008, 10h54
  2. [sgbd] Recuperer valeurs d'un Select dans un tableau
    Par Mu_Belier dans le forum SGBD
    Réponses: 16
    Dernier message: 27/05/2005, 15h46
  3. [C#] Custom Control : Recuperer valeur formulaire
    Par victorbru dans le forum ASP.NET
    Réponses: 22
    Dernier message: 21/04/2005, 09h02
  4. [STRUTS] Recuperer valeurs d'une url enrichi ?
    Par Ev3rGlide dans le forum Struts 1
    Réponses: 3
    Dernier message: 07/04/2005, 11h39
  5. [DateTimePicker]Recuperation valeur date
    Par jane2002 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/02/2003, 11h29

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