Comment me sortir de cet avertissement ? [Résolu]

Signaler
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Bonsoir a tous

en passant en mode debug sur un petit prog, je me retrouve avec 17 avertissements

Je montre ici la sub incriminée par un avertissement, mais tous mes avertissement sont du meme type, seule la sub change

Private Sub Chargepraticiens()
 
        Listpraticiens.Items.Clear()
        Try
            con.Open()
            Dim cmd As New OleDbCommand("SELECT * FROM PRATICIENS", con)
            rd = cmd.ExecuteReader
            Dim LVI As ListViewItem
            While rd.Read
                LVI = New ListViewItem
                LVI.Text = rd(0).ToString
                Listpraticiens.Items.Add(LVI)
            End While
            LVI = Nothing
            con.Close()
 
        Catch ex As Exception
            If langue = "en" Then
                messageaff = "An error has occurred during the readind access of the customers list."
                infoaff = "Database access error"
            Else
                messageaff = "Une erreur est survenue au cours de l'accès en lecture de la liste des praticiens."
                infoaff = "Erreur accès base de données"
            End If 
            MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End Try
 
    End Sub 


l'erreur est la suivante :
Avertissement 1 CA2000 : Microsoft.Reliability : Dans la méthode 'BaseForm.Chargepraticiens()', appelez System.IDisposable.Dispose sur l'objet 'cmd' avant que toutes les références s'y rapportant ne soient hors de portée.


et plus précisement, la ligne suivante est incriminée :
Dim cmd As New OleDbCommand("SELECT * FROM PRATICIENS", con)


Après recherches, j'ai compris qu'il fallait utiliser la methode "dispose" mais je ne vois pas comment regler le probleme.

J'aimerais vraiment comprendre ce qui a mal ete fait

Merci bien

6 réponses

Messages postés
14774
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
151
Bonjour,

Mets la partie :
Dim cmd As OleDbCommand
Hors de ton bloc try
Puis avant de sortir de ta fonction :
If cmd isnot Nothing then cmd.Dispose

Mon site
Messages postés
14774
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
7 mars 2021
151
Bonjour,

Evites :
Dim cmd As New OleDbCommand("SELECT * FROM PRATICIENS", con)
Préfères plutot :
Dim cmd As OleDbCommand= New OleDbCommand("SELECT * FROM PRATICIENS", con)

Car dans le premier cas, si tu mets la référence à Nothing, elle sera automatiquement réinstanciée.

Tu peux aussi sortir la déclaration (différent de l'instanciation) du Try, et avant de sortir, tu fais :
If cmd isnot Nothing then cmd.Dispose

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

merci bien de ton aide NHenri, je teste çà des demain matin
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

Bonjour,
Je viens de tester en remplacant comme tu l'avais suggéré par
Dim cmd As OleDbCommand= New OleDbCommand("SELECT * FROM PRATICIENS", con) 


et maintenant à la place de l'avertissement initial, j'ai
Avertissement 1 CA2000 : Microsoft.Reliability : Dans la méthode 'BaseForm.Chargepraticiens()', appelez System.IDisposable.Dispose sur l'objet 'cmd' avant que toutes les références s'y rapportant ne soient hors de portée.


et la ligne concernée est bien
Dim cmd As OleDbCommand= New OleDbCommand("SELECT * FROM PRATICIENS", con) 


alors la je ne comprends plus grand chose mais d'après moi, cette erreur fait encore référence a une methode "dispose" que je ne comprends pas
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

bonjour NHenry

je viens de faire comme tu me dis a savoir :

Private Sub Chargepraticiens()

        Listpraticiens.Items.Clear()
        Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM PRATICIENS", con)
        Try
            con.Open()
            rd = cmd.ExecuteReader
            Dim LVI As ListViewItem
            While rd.Read
                LVI = New ListViewItem
                LVI.Text = rd(0).ToString
                Listpraticiens.Items.Add(LVI)
            End While
            LVI = Nothing
            con.Close()

        Catch ex As Exception
            If langue = "en" Then
                messageaff = "An error has occurred during the readind access of the customers list."
                infoaff = "Database access error"
            Else
                messageaff = "Une erreur est survenue au cours de l'accès en lecture de la liste des praticiens."
                infoaff = "Erreur accès base de données"
            End If
            MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
            End Try
If cmd IsNot Nothing Then cmd.Dispose()
End Sub


cela me donne encore et toujours

Avertissement 1 CA2000 : Microsoft.Reliability : Dans la méthode 'BaseForm.Chargepraticiens()', appelez System.IDisposable.Dispose sur l'objet 'cmd' avant que toutes les références s'y rapportant ne soient hors de portée.
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013

Problème résolu
merci a toi NHenri pour ton aide