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 :

Exception persistante supp


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de linke
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 119
    Par défaut Exception persistante supp
    bonjour

    comment se débarrasser d'une exception?

    explication: j'utilise une connexion dans une méthode , cette connexion échoue( pour x raison) .
    une exception est levé est géré par un catch.
    une fois dans le catch , j'envoi plein d'information a travers une méthode qui va enregistrer l'erreur dans une bdd .
    le souci est que l’exception déclenchée dans la 1 ère méthode continue de provoquer erreur en cascade .

    comment supprimer l'exception une fois prise en compte ?

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Si l'exception se re-déclenche c'est que tu boucles sur la connexion et à chaque tentative tu as une nouvelle exception.

    Une fois l'exception "Catché", si tu n'en fais rien, elle disparaît.

  3. #3
    Membre confirmé Avatar de linke
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 119
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Si l'exception se re-déclenche c'est que tu boucles sur la connexion et à chaque tentative tu as une nouvelle exception.

    Une fois l'exception "Catché", si tu n'en fais rien, elle disparaît.
    d'abord merci pour ta réponse
    je vais détailler mon problème , avec un exemple
    voici la méthode qui va déclencher l'exception

    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
        Public Sub insert_info_import()
            Dim sc As SqlConnection = New SqlConnection
     
            Try
     
                Dim rqt As String
                Dim chaine As String = "Persist Security Info=False;User ID=********;Password=*****;Initial Catalog=*****;Server=***"
     
                sc.ConnectionString = chaine
                sc.Open()
     
                rqt = "INSERT INTO .........etc"
     
                Dim sInsert As New SqlCommand(rqt, sc)
                sInsert.ExecuteNonQuery()
     
                sc.Close()
                Exit Sub
     
            Catch err As SqlException
     
                sc.Close()
     
                insert_erreur_bdd(err.Message, _
                                  err.GetHashCode.ToString, _
                                  err.Source, _
                                  err.StackTrace, _
                                  err.TargetSite.ToString)
     
            End Try
        End Sub
    voici la méthode qui va enregistrer l'erreur
    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
    	    Sub insert_erreur_bdd(ByVal errMessage As String, _
                              ByVal errCode As String, _
                              ByVal errSource As String, _
                              ByVal errPile As String, _
                              ByVal errProcedure As String)
            Try
                Dim sc As New SqlConnection()
     
                Dim rqt As String
                Dim chaine As String = "Persist Security Info=False;User ID=********;Password=*****;Initial Catalog=*****;Server=***"
     
                Dim date_err As String = Date.Today.TimeOfDay.ToString
                Dim pnom As String = Environment.UserName
     
                sc.ConnectionString = chaine
                sc.Open()
     
                rqt = "INSERT INTO [dbo].[erreur]" & _
               "([pnom]" & _
               ",[date_err]" & _
               ",[libelle]" & _
               ",[valeur]" & _
               ",[prog]" & _
               ",[pile]" & _
               ",[methode])" & _
            "VALUES" & _
               "('" & pnom & "'" & _
               ",'" & date_err & "'" & _
               ",'" & errMessage & "'" & _
               ",'" & errCode & "'" & _
               ",'" & errSource & "'" & _
               ",'" & errPile & "'" & _
               ",'" & errProcedure & "')"
     
                Dim sInsert As New SqlCommand(rqt, sc)
                Dim i As Integer
                i = sInsert.ExecuteNonQuery()
     
                sc.Close()
                Exit Sub
            Catch err As Exception
                MsgBox(err.Message)
            Finally
            End Try
        End Sub
    comme on le vois la connexion n'est pas la même , par contre la connexion se fait sur la même BDD
    l'exeption levée dans la procédure Sub insert_info_import() empêche l’enregistrement de l'erreur avec la méthode Sub insert_erreur_bdd(ByVal errMessage ...etc) ; la ligne i = sInsert.ExecuteNonQuery() leve l'exception (la précédente ou la méme !!!!???)
    j'ai teste la méthode Sub insert_erreur_bdd(ByVal errMessage ...etc) est elle fonctionne .

  4. #4
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Re,

    Vu que ce n'est pas un problème d'ouverture de connexion, ce qui semble le plus probable, c'est que c'est les requêtes qui posent problème.
    Si la deuxième méthode fonctionne quand tu la teste toute seule, c'est surement que lorsqu'il s'agit d'une vrai exception, une des données que tu veux insérer ne lui va pas.

    Donc autant pour l'une que pour l'autre, mets un point d'arrêt juste avant le ExecuteNonQuery, récupère la requête dans la variable et essai de l’exécuter dans un MS SQL server management, si il y a un problème, il te dira pourquoi.

  5. #5
    Membre confirmé Avatar de linke
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 119
    Par défaut
    Citation Envoyé par mactwist69 Voir le message
    Re,

    Vu que ce n'est pas un problème d'ouverture de connexion, ce qui semble le plus probable, c'est que c'est les requêtes qui posent problème.
    Si la deuxième méthode fonctionne quand tu la teste toute seule, c'est surement que lorsqu'il s'agit d'une vrai exception, une des données que tu veux insérer ne lui va pas.

    Donc autant pour l'une que pour l'autre, mets un point d'arrêt juste avant le ExecuteNonQuery, récupère la requête dans la variable et essai de l’exécuter dans un MS SQL server management, si il y a un problème, il te dira pourquoi.
    désolé , je me suis peut être mal explique , en effet l'erreur est généré par mes soins.
    le but est de catcher tous les erreurs ( application et connexion ) est de les enregistrer dans une table spécifique .
    l'enregistrement de ces erreurs doit etre gérée par la sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub insert_erreur_bdd(ByVal errMessage As String, _
                              ByVal errCode As String, _
                              ByVal errSource As String, _
                              ByVal errPile As String, _
                              ByVal errProcedure As String)
    donc , pour enregistrer une exception lie a l'application en "interne" , il y a pas de soucis .
    par contre pour enregistrer les erreurs lies a la connexion BDD ca marche pas.

    scénario:


    a un moment une de mes méthode va lever une exception liée a une connexion bdd .
    dans le catch, les informations sont envoyés a une méthode b complètement externe a la Class , dans cette méthode b la connexion est empêché par l'exception provenant de la méthode a
    en effet l'exception catcher persiste ou propagée en "aval" de l'application

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    J'avais plus ou moins compris.
    Mais je n'arrive pas à comprendre si c'est un problème de connexion dans B ou un problème d’exécution de la requête dans B.

    Si c'est la connexion :

    ->Tu dis donc que le problème dans la méthode B, c'est l'ouverture de la connexion.
    -> Mais qu'est ce qui te fais dire que c'est parce que tu as soulevé une exception dans A, que la connexion dans B (qui est un autre objet) ne peut pas se faire ?
    -> Que te dis l'erreur ?

    Si c'est l'ExecuteNonQuery

    Ce que je suggérais, en pensant que c'était le ExecuteNonQuery qui pose problème, c'est que:

    ->Lors d'une exception de connexion dans A, les info que t'envois à B posent problème à l'insertion.
    ->Par exemple dans errPile, tu envois à B une chaine de 12 000 caractères, or tu voudrais, par exemple, l'insérer dans un table ou la colonne n'en fait que 50.
    ->D'où l'erreur.
    ->D'où ma suggestion, ta deuxième requête.... Prends là, colle là dans un QueryBrowser, exécute là, et là, si il y a un problème lié à un champ il te dira lequel.

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

Discussions similaires

  1. Tomcat 6 session persistante - Exception
    Par MooGle dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/05/2007, 23h16
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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