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 :

Statement If/Else/Then dans une requêtes SQL.


Sujet :

ADO.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de ideox
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Par défaut Statement If/Else/Then dans une requêtes SQL.
    Bonsoir,
    Je cherche à rendre mes requêtes ainsi que mon programme plus 'intelligent', c'est a dire que les données entrées dans mes 'TextBox' qui interrogent ma base de données soient vérifiées si elles existent bien dans ma base de données.
    Pour cela je cherche donc à ce que la valeur entrée dans la 'TextBox1' par exemple soit vérifiée si elle est présente ou non. Et en ressort une 'erreur' ou un 'succès'.
    Voici une idée qui ne marche pas :/ (au point de vue syntaxe/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
    20
    21
    22
    23
    24
    Conn = New SqlConnection("Server='" & TextIp.Text & "';Database=PS_UserData;User Id='" & TextUser.Text & "';Password='" & TextPassword.Text & "'")
            Try
                Conn.Open()
                Dim query As New SqlCommand("Select * from Ps_UserData.dbo.Users_master where UserUID='" & TextUID.Text & "'")
                Dim reader As New SqlDataReader
                reader = query.ExecuteReader()
                If IsDBNull(reader.GetString(0)) Then
    MessageBox.Show("Erreur!")
                Else
     
    Dim query2 As New SqlCommand("Update PS_UserData.dbo.Users_Master SET blabla (passons les détails)")
                End If
                ResultApSuccess.Text = "[Success!] -" & TextAp.Text & " AP removed to UserUID=" & TextUID.Text & ""
                ResultApError.Text = ""
                TextAp.Text = ""
                TextUID.Text = ""
                Conn.Close()
     
            Catch ex As Exception
                ResultApError.Text = "[Error!] Can not add " & TextAp.Text & " AP to UserUID=" & TextUID.Text & ""
                ResultApSuccess.Text = ""
            Finally
                Conn.Dispose()
            End Try
    De ce faites ma query 'check' l’existence de l'userUID entré.
    Mais cette syntaxe/code pourrai me servir pour 'interroger' d'autre colonnes de ma bdd.
    Si quelqu'un aurait un tuto (ou corriger mes erreur) ou bien un code plus propre et plus fonctionnel je suis preneur!

    Merci

  2. #2
    Membre très actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Par défaut
    Bonjour

    Déjà :

    - ne jamais utiliser de "select *"
    - mettre cela dans une procédure stockée
    - et, comme on te la déjà dit, utiliser des requêtes paramétriques.

    Ensuite dans une proc stock, tu peux très bien écrire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if exists(select 1 from dbo.Users_master where UserId = @UserId)
    	Update dbo.Users_Master 
    		SET blabla (passons les détails)
    			where UserId = @UserId;
    else
    	insert dbo.Users_Master  values (....);

  3. #3
    Membre averti Avatar de ideox
    Homme Profil pro
    Collégien
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Par défaut
    'Exists' n'est pas déclaré.
    Pourquoi ne doit jamais être utilisé ?
    Est-ce bien un code a intégrer dans du vb net et non que SQL ?

  4. #4
    Membre très actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Par défaut
    Citation Envoyé par ideox Voir le message
    'Exists' n'est pas déclaré.
    Si.

    Pourquoi ne doit jamais être utilisé ?
    Est-ce bien un code a intégrer dans du vb net et non que SQL ?
    C'est du SQL, que tu intègres dans ton VB.NEt dans ton cas (alors que je te conseille de le mettre dans une PS).
    Select * from est sensible à une modification de la structure de table susceptyible d'engendrer des bugs difficiles à tracer. Donc, la règle est simple : ne pas utiliser d'autant qu'il n'apporte rien.

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Select * from Ps_UserData.dbo.Users_master where UserUID='" & TextUID.Text & "'"

    Mon dieu!!! n'avez vous jamais entendu parler d'attaque par injection SQL!

    On est en 2015 celà fait 20 ans que les sqlparameters existent!

    Passez par des paramètres dans votre SqlCommand et ne construisez pas vos requètes dynamiquement à partir de données saisies par l'utilisateur!

    http://www.dotnetperls.com/sqlparameter

    NB: le select * n'est à bannir que dans le cas ou celà renvois de la données ceci est tout a fait valable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT C.ClientId
    FROM dbo.Client C
    WHERE EXISTS(SELECT * FROM dbo.addresse A WHERE A.ClientId=C.ClientId)

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

Discussions similaires

  1. [MySQL] Erreur dans une requête sql
    Par Goundy dans le forum PHP & Base de données
    Réponses: 37
    Dernier message: 30/01/2006, 16h08
  2. [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
  3. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  4. Nom de champ variable dans une requête SQL
    Par stip dans le forum ASP
    Réponses: 2
    Dernier message: 30/09/2004, 18h02
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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