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 :

Problème de Try Catch


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Par défaut Problème de Try Catch
    Bonjour a tous,

    J'ai créer une fonction qui liste les données de ma table commande. Cette fonction retourne une collection d'objet Commande.

    J'ai une erreur dans ma fonction et je me suis dit qu'un Try Catch pourrai m'aider a debugger.

    Mais le probleme est : Comment retourner le fameux SqlException sachant que je suis obliger d'avoir en retour une collection d'objet Commande ?

    Voici mon 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     static public List<Commande> ListerCommande(int idCom = 0)
            {
                List<Commande> listCommande = new List<Commande>();
                try
                {
     
                    string requete;
                    using (SqlConnection cx = new SqlConnection(ChaineConnexion))
                    {
                        if (idCom != 0)
                        {
                            requete = "SELECT idcom,idclient,datecom,heure FROM Commande CM, Client C WHERE CM.idclient = C.idclient AND  idcom = " + idCom;
                        }
                        else
                        {
                            requete = "SELECT idcom,idclient,datecom,heure FROM Commande CM, Client C WHERE CM.idclient = C.idclient ";
                        }
     
                        int idcom;
                        int idcli;
                        DateTime datecom;
                        DateTime heure;
     
     
                        SqlCommand cmd = new SqlCommand(requete, cx);
                        cx.Open();
                        SqlDataReader myreader = cmd.ExecuteReader();
                        while (myreader.Read())
                        {
                            idcom = myreader.GetInt32(0);
                            idcli = myreader.GetInt32(1);
                            datecom = myreader.GetDateTime(2);
                            heure = myreader.GetDateTime(3);
     
                            Commande NewCommande = new Commande(idcom, idcli, datecom, heure);
                            listCommande.Add(NewCommande);
                        }
                    }
                    return listCommande;
                }
                catch (SqlException ex)
                {
     
                   return listCommande.Add((Commande)ex);
                }
     
            }//fin de fonctionListerCommande
    Bien entendu j'ai une erreur dans le catch indiquant qu'il est impossible de convertir le type "System.Data.SqlClient.SqlExecption " en type "Commande".

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je comprends pas ce que tu cherches à faire... si tu veux récupérer l'erreur dans le code qui appelle ListerCommande, il ne faut pas la catcher dans ListerCommande, mais la laisser remonter et la catcher au niveau où tu veux la gérer.

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static public List<Commande> ListerCommande(int idCom, out Exception resultingException)
    {
    resultingException=null ;
    ...
    catch (SqlException ex) { resultingException=Ex ; return listCommande; }
    


  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Non, ce n'est pas ce que Tomlev a voulu dire. Comment le programme doit-il réagir en cas d'erreur ?
    * En cas d'erreur on retourne simplement une liste vide ? Alors le try cacth doit être dans ListerCommande et on retournera simplement une liste vide.
    * En cas d'erreur on doit afficher un message à l'utilisateur ? Alors pas de try catch dans ListerCommande mais plus haut, dans le code UI qui appelait cette fonction.

    Maintenant j'ai peur que Tomlev t'ait lui-même mal compris. Si tu voulais simplement afficher le message de l'erreur dans la fenêtre de déboguage alors ton try/catch doit être dans ListerCommande et, dans le bloc catch, il suffit de placer un trace.WriteLine(e.ToString()) où "e" est le nom de l'exception.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2011
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 255
    Par défaut
    Effectivement quand je passe le Try Catch dans l'appel de la fonction c'est tout de suite plus efficace.

    Je sais pas pourquoi je m’obstinai a essayé de passer le Catch directement de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    Simplement ceux-ci dans le code de l'appel de fonction. Simple et efficace.

    Merci a vous pour votre aide.


  6. #6
    Membre très actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Décembre 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Developpeur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 111
    Par défaut Try
    Idem comme on vient de te dire,Pour voir exception
    ex.Message

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

Discussions similaires

  1. Problème avec eval et try/catch
    Par kracter56 dans le forum MATLAB
    Réponses: 1
    Dernier message: 20/11/2012, 06h46
  2. Réponses: 6
    Dernier message: 07/05/2010, 10h48
  3. problème utilisation de try catch
    Par leovenus dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/03/2008, 16h47
  4. problème avec l'instruction try catch endtry
    Par jabulon dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/01/2008, 11h33
  5. Problème try-catch dans mon code
    Par little pepito dans le forum Langage
    Réponses: 7
    Dernier message: 11/06/2007, 12h22

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