Comment me sortir de cet avertissement ?

Résolu
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 1 déc. 2011 à 19:18
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 5 déc. 2011 à 07:57
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

NHenry Messages postés 15032 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 janvier 2023 156
2 déc. 2011 à 09:43
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
3
NHenry Messages postés 15032 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 janvier 2023 156
1 déc. 2011 à 20:22
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
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
1 déc. 2011 à 20:35
merci bien de ton aide NHenri, je teste çà des demain matin
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
2 déc. 2011 à 08:48
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
2 déc. 2011 à 10:34
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.
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
5 déc. 2011 à 07:57
Problème résolu
merci a toi NHenri pour ton aide
0
Rejoignez-nous