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 :

[C#] Probleme avec une requête à condition


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 193
    Par défaut [C#] Probleme avec une requête à condition
    Bonjour à tous,

    Voila la situation, j'essais de faire la vérification du login et du mot de passe d'un user lors de la connexion.

    voici une petit version sans requête à condition, vous avouerez que ce n'est pas très propre comme programmation.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
                 void Button1Click(object sender, System.EventArgs e)
     
                 {
     
                    this.GetDataTest();
           		 }
      private void GetDataTest() 
    { 
       string Username = textBox1.Text;
       string Pass = textBox2.Text;
       string ouverture = "connection reussie"; 
       string queryTest = "SELECT * FROM Test"; 
       string fermeture = "connection fermée";
     
     
       string connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data source=Gestionnaires.mdb"; 
     
       OleDbConnection conn = null; 
       OleDbCommand cmd= null; 
       OleDbDataReader reader = null;
     
       try 
       { 
          conn = new OleDbConnection(connstr); 
          cmd = new OleDbCommand(queryTest, conn); 
          conn.Open(); 
          MessageBox.Show(ouverture); 
          MessageBox.Show(queryTest); 
          reader = cmd.ExecuteReader(); 
          while (reader.Read()) 
           { MessageBox.Show("result : " + reader[1].ToString() + "," + reader[2].ToString());
          		  if (reader[1].ToString()==Username && reader[2].ToString()==Pass )
          				{ MessageBox.Show("Reconnaissance ok");
          		   		  break;}
          }
       }
       catch (Exception ex) 
          { MessageBox.Show(ex.ToString());} 
       finally 
       { 
          if( (conn!=null) && (conn.State != ConnectionState.Closed)) 
           { conn.Close();} 
          MessageBox.Show(fermeture); 
       } 
      }}
    Et pour rendre cette programmation plus propre, je voudrais utiliser une requête à condition. Le but serais d aller rechercher dans les textBox 1 et 2 les login et mot de passe du user et d'effectuer une requête de ce style :

    Select * from user Where login LIKE textBox1 AND password LIKE texBox2
    donc j'ai remplacer ma requête part :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string queryTest = "SELECT * FROM Test WHERE login LIKE "+Username+" AND PassWord LIKE "+Pass;
    mais cela ne marche pas... PQ ?
    j'ai comme erreur :

    Aucune valeur données pour un ou plusieurs parametres requis

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    c'est quoi ta base de données ?? (oracle, sql server ...)

    moi je mettrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string queryTest = "SELECT * FROM Test WHERE login = '" & textboxUsername.text & "' AND PassWord = '" & textboxPass.text & "'" ;

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 193
    Par défaut
    ma base de données est Access ...

    je vais essayer

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 193
    Par défaut
    ca ne marche pas ...

    ERREUR au niveau de la compilation :

    l'opérateur "&" ne peut être appliqué aux opérande de type String

  5. #5
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    c'est peut etre parce que tu es en c#, moi je fais du vb, en c# je sais pas ce que c'est l'operateur de concatenation

  6. #6
    Membre très actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Par défaut
    et comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string queryTest = "SELECT * FROM Test WHERE login LIKE '"+Username+"' AND PassWord LIKE '"+Pass+"'";
     
    string queryTest = "SELECT * FROM Test WHERE login = '" + textboxUsername.text + "' AND PassWord = '" + textboxPass.text + "'" ;
    a plus

  7. #7
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    les Like pour tester un login et un mot de passe c'est pas mal lol
    comme ça tu rentre juste un caractere pour chacun et hop tu te connecte.

    Mets des = plutot

    Dans ta requete sinon, si les champs login et motdepasse sont en string tu doit mettre des quotes autour..

    Mais ça tu doit le savoir si tu t'es un tout petit peu penché sur un tuto sql ?

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Je te conseille de jetter un oeil sur cet article

    http://webman.developpez.com/article.../sqlparameter/

  9. #9
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Par défaut
    je pense que le problème est dû aux apostrophes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .... where login like '" + ... + "' ...
    ceci dit, ton application sera facilemnt accessible par quelqu'un qui ne connait pas le mot de passe d'un utilisateur mais il lui suffit de connaitre juste le nom d'utilisateur, car en utilisant des requêtes de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where logine=..... and password=....
    il y aurait des risques d'injection SQL. je t'invite à cette occasion d'y jeter un coup d'oeuil
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 193
    Par défaut
    Merci à tous,

    la bonne solution était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string queryTest = "SELECT * FROM Test WHERE UserName = '"+Username+"' AND PassWord = '"+Pass+"'";

  11. #11
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    et si tu entre un login avec une apostrophe dans le textbox correspondant ?

  12. #12
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string queryTest = "SELECT * FROM Test WHERE UserName = '"+Username+"' AND PassWord = '"+Pass+"'";
    supposons que t'as dans la base de données:
    login : MyLogin
    password : blabla

    alors si tu saisi dans le text1.text : MyLogin' or 1=1 --
    je pense que tu vas accéder sans saisir le mot de passe, c'est ce qu'on appelle les attaques de type injection SQL!
    pour les apostrophes tu dois utiliser la fonction replace sinon ta requête ne va pas t'accepter les nom et les mots de passe comportant des apostrophes....
    Bonne Chance
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  13. #13
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    oui la fonction replace suffit à contourner tout ça

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

Discussions similaires

  1. Probleme avec une requête
    Par sitalgerie dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/10/2012, 12h21
  2. un probleme avec une requête Xpath
    Par ngatchou dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/11/2011, 11h10
  3. probleme avec une requête préparée
    Par stc074 dans le forum JDBC
    Réponses: 5
    Dernier message: 19/08/2010, 22h04
  4. Probleme avec une requête sur 2 tables
    Par Sieg Hart dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2009, 14h14
  5. Probleme avec une requête MySQL
    Par Alexlesilex dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/05/2006, 17h48

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