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 :

Quelle est la bonne méthode ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut Quelle est la bonne méthode ?
    Bonjour à tous !

    Voici mon problème, j'ai une classe d'accès aux données qui contient une méthode GetInfoClient() (voir ci-dessous) qui doit me renvoyer un objet Client.
    La classe Client contient un seul constructeur qui prend en paramètre un SqlDataReader.

    Le problème est que je n'arrive pas à compiler car il me dit que la variable locale client n'est pas assignée et le problème se porte sur return client;

    Bon, je comprends bien le message d'erreur... mais je voudrais savoir quelle méthode dois-je utiliser pour contrer ce problème ?!

    Suis-je obligé de définir un constructeur vide pour instancier mon objet Client avant le using et ensuite faire une méthode Add() qui prendrait en paramètre le SqlDataReader ??

    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
     
    public Client GetInfoClient(string sNumero
    {
        try			
        {
            Client client;
     
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = this.DbConnection;
                cmd.CommandText = "getInfosClient";
                cmd.CommandType = CommandType.StoredProcedure;
     
                SqlParameter prmNumero= new SqlParameter("@numero", SqlDbType.VarChar, 50);
                prmNumero.Value = sNumero;
                cmd.Parameters.Add(prmNumero);
     
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if(reader.Read())
                    {
                        client = new Client(reader);
                    }
                    reader.Close();
                }
            }
            return client;
        }
        catch (Exception ex)
        {
            //
        }
    }
    Merci d'avance pour vos réponses !
    Lionel.

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(reader.Read())
    {
       client = new Client(reader);
    }
    Si tu ne passe pas dans le if, ton client ne sera pas assigné. Et ça, le compilateur ne le veut pas.
    Initialise ton client à null.
    Ta valeur de retour sera un client ou null.....

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    Il faudrait aussi que ton return soit dans un finally comme ca tu es sur que ta methode te renvoye quelque chose

  4. #4
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Ouais, en plus....
    Le mieux c'est d'initialiser le client à null avant tout try et de le retourner hors de tout try....

  5. #5
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut
    Citation Envoyé par xian21 Voir le message
    Il faudrait aussi que ton return soit dans un finally comme ca tu es sur que ta methode te renvoye quelque chose
    Euh... à priori non, la clause finally n'accepte pas de return.

  6. #6
    Membre confirmé
    Profil pro
    Développeur
    Inscrit en
    Avril 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2007
    Messages : 52
    Par défaut
    Voici du coup comment j'ai structuré ma méthode :

    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
     
    public Client GetInfoClient(string sNumeroCommande)
    {
        //initialisation du client à null
        Client client = null;
     
        try
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = this.DbConnection;
                cmd.CommandText = "getInfosClientColissimoByNumero";
                cmd.CommandType = CommandType.StoredProcedure;
     
                SqlParameter prmNumero = new SqlParameter("@numero", SqlDbType.VarChar, 50);
                prmNumero.Value = sNumeroCommande;
                cmd.Parameters.Add(prmNumero);
     
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        client = new Client(reader);
                    }
                    reader.Close();
                }
            }
        }
        catch (Exception ex)
        {
            //
        }
     
        return client;
    }
    Le fonctionnement me parait plus propre, reste à tester la valeur de retour de l'objet client dans la fonction appelante.

    Merci pour votre aide !
    Lionel.

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

Discussions similaires

  1. Quelle est la bonne prononciation de 'GNOME'
    Par sovo dans le forum Gnome
    Réponses: 8
    Dernier message: 20/04/2018, 14h08
  2. Réponses: 2
    Dernier message: 14/03/2008, 09h57
  3. Réponses: 12
    Dernier message: 10/08/2006, 09h44
  4. Réponses: 20
    Dernier message: 27/06/2006, 17h42
  5. [c# 2.0]TryParseExact Quelle est la bonne syntaxe ?
    Par Pierre8r dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/05/2006, 19h34

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