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 :

Traiter erreur dans un DataSet typé


Sujet :

C#

  1. #1
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut Traiter erreur dans un DataSet typé
    Bonjour, ici.

    Bon, je cherche à récupérer une erreur de saisie dans un dataset typé.

    Détails : tous les champs de la table sont AllowDBnull=false (tels que dans la table d'origine, bien sûr). La non-saisie dans la textbox correspondante à une colonne précise laisse l'opportunité de ne RIEN mettre. On lance la validation, mais l'enregistrement des modifications ne s'effectue pas. Normal, vu qu'un champ a été laissé vide, ce qui ne doit pas être (AllowDBnull=false).
    Cependant, à ce stade, je souhaiterais pouvoir récupérer l'erreur qui empêche la validation de l'enregistrement, afin de la traiter et de l'afficher, car, de base, le dataset typé se contentera de ne rien faire sans afficher ou renvoyer quoi que ce soit.
    Avec la formatrice, on se fait des nœuds au cerveau pour trouver une solution. On ne peut pas laisser l'utilisateur sans explication sur l'échec de sa saisie.

    Merci d'avance de toute l'aide possible.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    lut,
    aucune exception n'est générée lors de la tentative d'update/insert ??

    perso, je grise le bouton de validation tant que tous les champs ne sont pas remplis. (en plus je mets chaque champ en rouge tant qu'il est vide et le passe en vert une fois renseigné)
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  3. #3
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Non, aucune exception. ça ne valide pas l'enregistrement. c'est tout. (sauf à la mise à jour de la bdd elle-même, où là, c'est elle qui renvoie l'erreur, mais c'est pas la bonne solution).
    Ta solution, c'est le contrôle dans les champs, directement, avant la mise à jour du dataset. Mais avec ma formatrice, on est bornés on veut que le RowChanging génère une erreur qu'on puisse intercepter.
    Même si on met un if (machintruc.Row isDBnull) ça marche pas.
    En mode debug, le test est fait, mais il ne se passe rien de plus.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    re,
    tester si la ligne est DBNull n'est pas la bonne solution vu qu'elle existe :p

    pourquoi ne pas tester chaque champ ?
    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    bool ToutRempli = true;
    foreach(DataColumn truc in MaTable.Columns)
    {
         if (MaLigne[truc.ColumnName] == DBNull.Value)
         {
              ToutRempli = false;
              break;
         }
    }
    if (!ToutRempli)
         MessageBox.Show("t'as po tout rempli gros Noob !");
    je te conseille quand même de changer le message de fin...
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    as tu regardé dans DataTable.HasErrors ?
    Normalement les lignes en erreurs sont marquées et les erreurs sont accesibles via DataRow.RowError ?

    Au pire, il me semble qu'en spécifiant DataTable.EnforceConstraints il doit tout de même te jeter une exception.

  6. #6
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach(DataColumn truc in MaTable.Columns)
    {
         if (MaLigne[truc.ColumnName] == DBNull.Value)
         {
              ToutRempli = false;
              break;
         }
    Là, tu testes dans la datatable, donc le dataset, une fois modifié. Ça ne marchera pas, puisqu'une colonne formatée en NON NUL refusera une valeur nulle et la nouvelle entrée ne sera jamais validée. Donc je ne pourrais jamais tester de colonnes nulles car elles n'existeront pas.
    Mis à part tester le champ de saisie (textbox) avant la mise à jour du dataset, il doit bien exister une solution. Sinon, ça implique que le champs de saisie corresponde au format de la donnée, mais si on fait une interface générique et non adapté à une table spécifique, on est coincé, car pas sensé connaître ce format.

    DataTable.HasErrors (etc...), on travaillait justement dessus. Mais on ne récupérait toujours rien (EnforceConstraints=true). ce dernier paramètre ne forçant que l'application des contraintes, mais ne renvoie rien en cas de violation. Ça annule juste l'action, donc la validation.
    Ou alors, en le mettant à false et en utilisant la solution de Themacleod1980 (valide, dans ce cas)

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    est-ce que par hasard tu ne confondrais pas vide et null ?
    ce sont deux choses totalement différentes...

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Points : 625
    Points
    625
    Par défaut
    N'y a t'il pas d'évennement "Validating" ?
    (qui se passerait juste avant le validated et qui permettrait d'annuler la validation selon tes conditions)
    "Essayer est le premier pas vers l'Echec !" (Homer Simpson)

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/04/2011, 09h52
  2. DataSet typé dans une DLL
    Par loulouklm dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/07/2010, 15h57
  3. Dataset Typé MAJ dans la BDD
    Par hirochirak dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2008, 18h54
  4. Erreur de Microsoft.VSDesigner dans le Dataset
    Par belsuncette dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/12/2007, 23h49
  5. Réponses: 1
    Dernier message: 23/11/2007, 10h03

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