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

C# Discussion :

Comment travailler avec Boolean [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Par défaut Comment travailler avec Boolean
    Bonjour!
    j'arrive pas à comprendre l'erreur:
    tout chemins de code ne retourne pas nécessairement une valeur
    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
     
            public static  Boolean _Connexion_User (string plogin, string pmotpass)
            {
                Boolean Valeur = false;
                string SQL = "SELECT * FROM [Sécurités - Utilisateurs]";
     
     
                try
                {
     
                    using (SqlConnection Conn = new SqlConnection(ConnectionString))
                    {
                        Conn.Open();
                        SqlCommand Cmd = new SqlCommand(SQL, Conn);
                        SqlDataReader Reader = Cmd.ExecuteReader();
     
                        while (Reader.Read())
                        {
     
                            if ((Reader[0].ToString().Trim() == plogin.Trim()) && (Reader[2].ToString().Trim() == pmotpass.Trim()))
     
                                Valeur = true;
     
                            else
     
                                Valeur = false;
                        }
                        /// Fermer la connection .
                        Conn.Close();
                       }
                    return Valeur;
                }
                catch (Exception pb)
                {
                    pb.Message.ToString();
     
     
                }
            }
    Merci pour l'aide.

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Bonjour,

    Ici, ta fonction doit retourner un booléen. Tu fais bien un "return Valeur" à la fin de ton try, mais si jamais une exception arrive, aucune valeur n'est remontée dans le catch ou le finally.

    Résultat, VS devine que si une exception arrive, aucune valeur ne sera retournée. Il ne veut donc pas compiler
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    dans le catch si ca te semble illogique de retourner true ou false, tu peux faire throw;
    l'exception sera alors remontée à l'appelant (qui pourra donc agir en conséquence)

    de plus, tu sembles chercher si le couple login/mot de passe existe dans la table, et pour ca il ne sert à rien de lire toute la table dans ton programme
    en plus ton code ne peut pas marcher, quand ta boucle va trouver le couple, valeur va prendre true, mais à la ligne d'après le couple ne sera plus bon et tu vas réécrire false (il fallu aurait par exemple sortir de la boucle dans le valeur = true)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cmd.commandtext = "select 1 from [Sécurités - Utilisateurs] where login = @login and password = @password";
    cmd.parameters.Add("@login", plogin.trim);
    cmd.parameters.Add("@password", pmotpass.trim);
    (...)
    reader = cmd.executereader;
    return reader.Read
    si le couple existe, la requete retournera une ligne (avec une colonne contenant 1)
    si le couple n'existe pas, la requete ne retournera pas de données, et .read retournera false

    les données sont lues par le sgbdr sans les rapatrier donc c'est plus rapide, surtout si la table est indexée
    au passage il y a l'utilisation des parameters, qui sont plus que conseillés pour les string et date


    le conn.close n'est pas utile non plus, conn étant dans un bloc using, .dispose sera appelé, et .dispose fait .close
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre éclairé Avatar de solaar
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 607
    Par défaut
    Oui cool!
    le return après le catch ou finally.
    mais j'ai un autre souci encore SVP.

    dans ma base de donnée j'ai un champ avec type bit.

    je ne sais comment le manipuler ce type.
    j'ai comme erreur:
    l'opérateur == ne peut pas être appliqué aux opérandes de type objet et bool
    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
          string SQL = "SELECT * FROM  [Sécurités - Accès Sociétés] WHERE( [Id Utilisateur]= '" + login + "')";
     
                try
                {
     
                    using (SqlConnection Conn = new SqlConnection(ConnectionString))
                    {
                        Conn.Open();
                        SqlCommand Cmd = new SqlCommand(SQL, Conn);
                        SqlDataReader Reader = Cmd.ExecuteReader();
     
                        while (Reader.Read())
     
                            if (Reader[3] == true) SOC = Reader[1].ToString();
                            else
                                SOC = null;
     
                    }
     
                }
                catch (Exception pb){pb.Message.ToString();}
                return SOC;
          }

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    on ne fait pas un select * pour ramener un colonne c'est contre performant
    il faut éviter les reader[3] mais plutot nommer les colonnes reader["telcolonnne"] sinon le code est illisible plusieurs mois plus tard
    reader[] retourne une valeur as object, c'est à toi de vérifier que le type est ce que tu attends, ne l'occurrence un booléen (ou alors reader.getboolean)

    en bref il faudrait apprendre un peu avant de coder
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    darthmower
    Invité(e)
    Par défaut
    Bonjour,

    Je ne conseille pas ce genre de requête qui sont sujette aux injections SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 1 from [Sécurités - Utilisateurs] where login = @login and password = @password
    Il faut dans ce cas là utiliser le test sur le login

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select password from [Sécurités - Utilisateurs] where login = @login
    et ensuite tester dans le code le password.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par darthmower Voir le message
    Bonjour,

    Je ne conseille pas ce genre de requête qui sont sujette aux injections SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 1 from [Sécurités - Utilisateurs] where login = @login and password = @password
    Il faut dans ce cas là utiliser le test sur le login

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select password from [Sécurités - Utilisateurs] where login = @login
    et ensuite tester dans le code le password.
    il est impossible de faire une injection sql avec un dbparameter (d'où l'utilisation de variable sql @_ et non d'une concaténation)
    et si tu veux parler de sécurité, ta méthode va faire transiter le mot de passe sur le réseau et le mettre en ram sur la machine
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [DW MX2004] Comment travailler avec Excel?
    Par pierrot10 dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 11/05/2006, 17h34
  2. Comment travailler avec Win32
    Par Mathieu.J dans le forum MFC
    Réponses: 4
    Dernier message: 25/01/2006, 09h49
  3. [XSLT] Comment travailler avec la balise <br/>
    Par billou13 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/10/2005, 10h47
  4. Comment travailler avec le port IEEE 1394?
    Par Cornejito dans le forum MFC
    Réponses: 6
    Dernier message: 04/05/2005, 14h22
  5. Comment travailler avec le client ?
    Par mathieu dans le forum Gestion de projet
    Réponses: 3
    Dernier message: 12/10/2004, 20h56

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