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 :

Utilisation de requetes avec ado.net


Sujet :

ADO.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Par défaut Utilisation de requetes avec ado.net
    Bonjour à tous

    je suis entrain de réaliser une application WPF sous Visual Studio 2010 mais je ne suis doué en ce qui concerne les bases de données

    j'ai lié une base de données au projet créée dans le projet DataBase (add new item -> Ado.net entity data model -> ...), j'ai nommé bref j'ai maintenant le fichier .edmx avec le schéma correspond à mes tables et les méthodes générées automatiquement => bref, l'ajout s'est bien effectué

    le connectionString :
    Code cs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <connectionStrings>
        <add name="ProjetEntities" connectionString="..." providerName="..." />
      </connectionStrings>
    là où j'ai un problème, c'est au moment de créer une requête car je ne sais pas comment faire ...

    j'appelle une méthode qui reçoit un login et un mot de passe et qui me renvoie un boolean si l'utilisateur est enregistré dans la base de données ou non
    BD : table Utilisateur avec login (clé primaire), motDePasse

    Code cs : 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
     
    public Boolean verifConnexion(String login, String motDePasse)
    {
    List<Utilisateur> utilisateurs = new List<Utilisateur>();
    DataBase.ProjetEntities db = new DataBase.ProjetEntities();
     
    try
    {
          // obtient l'enregistrement ou pas où le login et le mot de passe correspond à ce qui a été rentré
          // Ne sais pas si c'est vraiment correct
          var query = from u in db.Utilisateurs where u.Login == login && u.MotDePasse == motDePasse select u;
         utilisateurs.AddRange(query);
    }
    catch(Exception e) 
    {
         Console.WriteLine(e.Message);
    }
     
    // Boucle sur la liste d'utilisateur pour voir s'il y a un utilisateur enregistré avec ces valeurs
         int i = 0;
         foreach (Utilisateur u in utilisateurs)
         {
              i++;
         }
     
         if (i == 0)
             return false;
         else
             return true;
    }

    voilà, donc si quelqu'un pouvait m'aider à comprendre comment faire une requete

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut utiliser des prédicats
    Bonjour,

    pour ton problème, à mon sens, tu peux utiliser where avec un prédicat. de cette facon tu gardes les choses simples. Voici un bout de code qui peut faire l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    bool trouve = true;
    var ResultatRecherche = db.Utilisateurs.Where(u => u.Login == tonLogin && u.PassWord == tonPassword);
    //tu testes par la suite le résultat de ta recherche : si le ResultatRecherche est null donc l'utilisateur avec le login et mot de passe n'est pas trouvé sinon il y est.
    if(ResultatRecherche==null)
      trouve=false;
     
    return trouve;
    comme tu peux voir sur le code, le where contient un prédicat, ce qui veut dire que ne seront retournés que les entités qui satisfont la condition qui est traduite par la valeur "true" du prédicat.

    Voila si besoin d'explications supplémentaires n'hésites pas ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Par défaut
    merci bien, je viens de tester et cela fonctionne

    par contre, je viens de regarder la ligne de code et je voudrais bien avoir plus d'infos concernant : u => u.Login == tonLogin

    cela veut-il dire que tu instancies un objet u (pour Utilisateur), à qui tu dis que pour u.Login, tu y mettras la valeur de tonLogin dans le cas de la requête??

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 12
    Par défaut Parcours en arriere plan
    De rien,

    En fait, ce qui se passe, c'est un parcours de la liste des éléments de la collection des résultats de la recherche. u Représente un objet du type utilisateur de la collection parcourue. D'ailleurs, l'intellisense de visual studio va bien te montrer les propriétés de l'objet.

    Au arrière plan, l'extension where sera traduite en boucles foreach sur la collection.

    Quoi qu'il en soit se documenter est le meilleur moyen de maîtriser la technologie dans ses détails (et le diable s'y cache apparemment lol).

    Bon courage

  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
    Pourquoi diable instanciez vous un objet entier (Utilisateur) qui va transiter tout entier par le Réseau juste pour retourner un BOOLEAN???

    faites un COUNT()>0 pour limiter les informations qui transiteront par le reseau!!!

    Le mieux dans votre cas est un ANY() qui sera traduit par un EXISTS en requète et non en COUNT!

    LINQ est un bel outil mais mis entre de mauvaises main...

  6. #6
    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
    Au arrière plan, l'extension where sera traduite en boucles foreach sur la collection

    Par du tout! vous faites du LINQ TO SQL! il n'y a pas de foreach!
    Vous utilisez un DATACONTEXT... ce qui veux dire que vous ne travaillez pas sur des collections en mémoire mais sur des requêtes SQL qui serviront de sources pour instancier vos collections .net..

    En clair le .WHERE() est traduit ici en WHERE dans la requète SQL...

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

Discussions similaires

  1. Specificite du IN dans une requete avec ADO.NET
    Par paladice dans le forum ADO.NET
    Réponses: 6
    Dernier message: 30/05/2013, 14h19
  2. Réponses: 0
    Dernier message: 29/03/2010, 16h39
  3. Réponses: 4
    Dernier message: 11/05/2006, 16h57

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