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

VB.NET Discussion :

Problème avec les exceptions


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Problème avec les exceptions
    Bonjour,

    J'ai un problème avec les exceptions depuis hier...

    Quand je commence à faire le déboggage pas à pas, à la ligne MyReader = MyCommand1.ExecuteReader() , il y a un message d'erreur qui apparaît : "l'exception OleDbException n'a pas été gérée. Échec de IErrorInfo.GetDescription avec E_FAIL(0x80004005)."

    Est-ce quelqu'un peut m'aider svp?

    voici le bout de programme :
    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
    MyConnexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=H:\Antoine\CVaR\CreditVaR_PR.mdb"
     
    MyCommand1 = MyConnexion.CreateCommand()
     
    MyCommand1.CommandText = "MA REQUÊTE SQL"
    MyAdapter = New OleDbDataAdapter(MyCommand1)
    MyConnexion.Open()
    MyReader = MyCommand1.ExecuteReader()
     
    If MyReader.HasRows = False Then
    MsgBox("Requête Vide", MsgBoxStyle.Exclamation)
    Exit Sub
    End If
     
    Do While MyReader.Read()
    nada = MyReader.GetString(1)
    Rset = Rset + 1
    Loop
     
    Nb_Obligors = Rset
     
    ReDim CC(Nb_Obligors, 7)
     
    'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
    MyAdapter.Fill(MyDataSet, "INPUTS")
    'On met alors dans un Objet DataTable une table du DataSet
    MyDataTab = MyDataSet.Tables("INPUTS")
    MyDataRow = MyDataSet.Tables("INPUTS").NewRow()

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il doit y avoir un message avec l'exception, et la ligne qui passe en erreur avec

    il faut un try catch pour des choses comme ca (partout ?)
    ensuite tu mets un point d'arret sur catch et tu peux connaitre tous les détails de l'erreur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Try
    .... traitements qui risque de planter avec ton oledb
          Catch ex As OleDb.OleDbException
    .... traitement si erreur oledb
          Catch ex As Exception
    .... traitement si erreur autre...
          End Try
    mais renseigne toi sur les try catch et les exceptions.
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    A quel endroit du programme dois-je mettre le try catch ???

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    partout où il y a un risque d'erreur (autrement dit, presque partout)
    une erreur (exception) n'est pas forcément un bug de programmation mais parfois un cas non prévu, un erreur matériel etc...

    par exemple, tu lis un fichier, si le fichier n'existe pas, la fonction du framework pour lire le fichier va générer une erreur, l'erreur si elle n'est pas interceptée par ton code arrete l'appli (enfin sur .net c'est moins sauvage mais ca peut arriver)

    ouvrir une base de données, si la chaine de connexion est pas bon, ca te le signale aussi pas une erreur

    ou encore appeler une sub qui a des paramètres, dont un que tu fournis est à nothing alors qu'il ne devrait pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Try
      'code d'ouverture de base de données
    Catch ex as exception
      'traitement de l'erreur
    End Try
    en cas d'erreur sur une ligne, au lieu de passer à la ligne d'après, ca passe dans le catch directement

    dans traitement de l'erreur, on peut afficher un message à l'utilisateur, appeler d'autres parties de code pour faire d'autres traitement et/ou encore mieux enregistrer les détails de l'erreur dans un fichier ou une base de données (type d'erreur, message et stacktrace (pile au moment de l'erreur))
    enregistrer les erreurs permet de débugger facilement une appli même une fois installée




    il est aussi possible dans ton code de gérer des erreurs, si par exemple ton code est utilisé par un autre développeur, ou à des fins de maintenances

    par exemple, moi à chaque fois que j'utilise un select case, je génère une erreur pour les cas non prévus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select Case mavariable
      Case 0
        'traitement
      Case 1
        'traitement
      Case else
        Throw New ApplicationException("Cas non prévu : " & mavariable)
    End Select
    des fois on modifie du code à certains endroits et on en oublie d'autres
    après analyser des rapports d'erreur (qui n'ont pas arreté l'appli vu que c'est dans un try catch) on peut corriger des incohérences, ou des cas non pensés comme des erreurs de droits d'utilisateurs sur les fichiers ...



    try s'utilise soit avec catch, soit avec finally, soit avec les 2
    Avec juste finally, en cas d'erreur, ca passe directement dans le finally, et l'erreur se propage à l'appelant
    avec catch et finally, le code catch est executé, puis le code finally

    finally est executé dans TOUS les cas, ca permet de sécuriser le code, en cas d'erreur, on peut par exemple fermer la connexion à la base, arreter des traitements, des threads etc...

    il est aussi possible d'avoir des catch multiple pour à l'execution faire des traitements différents selon le type d'erreur
    comme nous le montre le code de tigunn


    enfin en cas d'erreur, il arrive souvent qu'on se dire "ah bah je pensais pas que va pouvait planter ici"
    donc il vaut mieux en mettre trop que pas assez, l'impact sur les performances étant dans la majorité des cas plus que négligeable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éclairé Avatar de tigunn
    Homme Profil pro
    Développeur de bug
    Inscrit en
    Janvier 2003
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de bug

    Informations forums :
    Inscription : Janvier 2003
    Messages : 608
    Points : 658
    Points
    658
    Par défaut
    un cours ! c'est cool sperot
    Le monde se divise en deux: ceux qui utilisent le tag et les autres.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/08/2008, 11h00
  2. Problème avec les Exceptions
    Par CORTEZ dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 23/05/2008, 10h06
  3. Problème avec les exceptions
    Par shenron666 dans le forum Code::Blocks
    Réponses: 3
    Dernier message: 11/10/2006, 12h53
  4. Problème avec les exceptions
    Par Mucho dans le forum wxWidgets
    Réponses: 3
    Dernier message: 04/10/2006, 17h10
  5. probléme avec les exceptions
    Par sofiane44 dans le forum Langage
    Réponses: 1
    Dernier message: 10/01/2006, 16h30

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