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 :

Try/catch, quel textbox n'a pas le bon type de donnée


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 252
    Points : 192
    Points
    192
    Par défaut Try/catch, quel textbox n'a pas le bon type de donnée
    Bonjour
    L'intitulé du message n'est à mon avis pas trop clair, je vais tenter d'expliquer mon souci un peu mieux.
    J'ai une dll qui s'occupe du crud sur une base de donnée SQL Server.
    J'ai fais un petit projet dans ma solution en WPF pour tester ma DLL.
    J'ai par exemple une video avec un Id video (int donc) et un nom de vidéo.
    J'ai 2 textbox pour remplir ma base.
    Je dois donc convertir mon textbox en int.
    Pour l'instant pas de souci.
    Le problème vient plutot de l'utilisateur.
    Il s'agit ici d'un exemple simple, mais dans la réalité, je peux avoir plsuieurs Textbox avec des champs Int, etc.
    Pour l'instant, avec un Try/catch, je récuprer l'information qu'il rentre une mauvaise information (dans l'ensemble des textbox)
    Or, je voudrai lui indiquer quel champ n'est pas bon.
    Un exemple étant plus parlant à mon avis
    C#
    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
     
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    sp.AddVideo(new Video(Convert.ToInt32(textBoxVideoId.Text), (textBoxVideoName.Text)));
                }
                catch (Exception err)
                {
                   // TBoxErrorMsg.Text = err.Message;
                    String erreur = Convert.ToString(err);
                   MessageBox.Show(erreur);
     
                }
                finally
                {
                    dataGrid_getvideo.DataContext = sp.GetVideos().ToList();
                }
    La j'obtiens un message du style :
    System.formatexeception: Le format de la chaine est incorrect, etc etc....
    Certes, mais pas le textbox avec de mauvais paramètre....
    Une idée ?
    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Je ne crois pas que l'erreur contienne cette information. A toi donc de structurer ton code pour le savoir, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int videoId;
    if(!int.TryParse(textBoxVideoId.Text, out videoId))
    // => erreur sur l'id saisi par l'utilisateur alors on arrête le traitement
    ...
    sp.AddVideo(new Video(videoId, textBoxVideoName.Text));

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 223
    Points : 28 213
    Points
    28 213
    Par défaut
    Soyons, un tant soit peu intelligent

    Dans ton code seule une erreur sur cette ligne peut être capturer par ton try :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sp.AddVideo(new Video(Convert.ToInt32(textBoxVideoId.Text), (textBoxVideoName.Text)));
    A supposer que la méthode AddVideo attende bien un Int32 et une String comme paramètre, dans cette ligne seule une instruction peut provoquer une erreur de format incorrect :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ToInt32(textBoxVideoId.Text)
    Tu connais donc le Textbox fautif

    Mais évidemment, il vaut mettre en place une vérification de la saisie plutôt que de laisser générer une exception pour rien.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 252
    Points : 192
    Points
    192
    Par défaut
    Effectivement, dans ce cas précis, je suis d'accord avec sevyc64, mais (oui oui, il a un mais )
    En fait, je fais juste une appli de test pour moi perso dans mon coin, mais ma DLL va réellement servir dans une application professionnelle.
    Elle a pour charger de ce connecter sur la base de donnée pour lire, écrire, mettre à jour, etc....
    En fait, le client aura au final un datagrid ou autre en WPF pour voir, ajouter, supprimer ou éditer les données.
    Je souhaite donc implémenter dans ma dll une possibilité "d'attraper" l'erreur, afin de le faire remonter au plus prêt du client (mais ça ce n'est plus ma partie) genre (attention dans le champs numéro de la vidéo, vous devez rentrer un nombre positif entre 0 et 2500 par exemple)
    De plus, ce n'est qu'un exemple de table, je peux avoir par exemple des relations entre une vidéo et autre chose, avec 2 clefs étrangères numériques, et je souhaiterai indiquer le champ impliqué dans l'erreur au client.
    Voila, j'espère avoir était plus clair, je vais essayer d'adapter la solution d' Ostenhard et je vous tiens au courant.
    Dans tout les cas merci d'avance

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 223
    Points : 28 213
    Points
    28 213
    Par défaut
    2 solutions :

    - Soit le controle des données est fait avant quelles soient passées à la dll, (ce qui de toute façon devrait normalement être fait). Dans ce cas ça ne concerne pas la dll, mais l'appli cliente qui doit vérifier les données saisies par l'utilisateur.

    - soit c'est ta dll qui fait le contrôle. Dans ce cas ta méthode doit devenir une fonction pour retourner un code d'erreur. Donc soit au choix tu retourne un code que l'appli cliente doit décoder en fonction de la doc que tu fournira avec la dll, soit tu retourne un message en clair.


    Dans ce genre de situation, personnellement, je part sur le principe du code d'erreur avec, en général

    • 0 quand tout va bien,


    • une autre valeur positive quand tout va bien mais qu'il faut détailler l'information, une valeur différente par détail


    • -1 en cas d'erreurs


    • une autre valeur négative en cas d'erreur mais qu'il faut détailler l'information, une valeur différente par détail

    Dans le cas ou il n'y a que 0 et -1, je remplace aussi parfois par True/False

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 252
    Points : 192
    Points
    192
    Par défaut
    Ok, je vais opter pour la seconde solution car elle me concerne.
    En fait dans la partie cliente je suis obligé de faire un convert si je veux que VS compile, j'ai rajouté un try/catch, mais je pensais que l'on pouvait directement savoir quel Textbox dans mon cas déclencher l'exception.
    Encore merci

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 223
    Points : 28 213
    Points
    28 213
    Par défaut
    Tu le saurais si tu utilisais des variables intermédiaires en faisant la conversion en dehors de l'appel à la fonction (une seule instruction par ligne).
    Mais dans le cas présent, le fait de mettre plusieurs instructions sur une seule et même ligne, comme la conversion au moment de l'appel, tu as une erreur sur la ligne mais tu ne sais pas quelle instruction sur cette ligne.

    Quand je dis "tu le saurais", ça se voit en mode pas à pas car tu vois sur quelle instruction ça plante, mais le try/catch n'en saurais pas plus pour autant.
    Par contre, tu pourrais mettre plusieurs Try/Catch pour différencier les erreurs.

    Mais ici, le plus propre étant encore de faire un contrôle des données comme te l'a indiqué ostenhard

    Sans que cela, d'ailleurs ne t'empêche d'implanter une seconde ligne de protection dans la dll comme je l'indiquais

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

Discussions similaires

  1. [IP-2010] Erreur: Section ne peut pas stocker le type de données lié
    Par MrMeteo dans le forum InfoPath
    Réponses: 1
    Dernier message: 06/06/2014, 07h56
  2. Réponses: 4
    Dernier message: 22/04/2013, 10h24
  3. [SQL2005] TRY-CATCH ne passe pas le contrôle au CATCH ?
    Par elsuket dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/10/2008, 14h06
  4. Pourquoi un try catch ne marche-t-il pas ?!?
    Par noussibeau dans le forum VB.NET
    Réponses: 13
    Dernier message: 09/11/2007, 10h14
  5. Builder n'accepte pas try/catch/__finally
    Par Rodrigue dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/04/2005, 13h15

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