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 :

Avertissement CA2000 appelez System.IDisposable.Dispose [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Par défaut Avertissement CA2000 appelez System.IDisposable.Dispose
    Bonjour,

    Je débute avec visual basic et j'essaye de coder une connexion à un serveur mysql local. J'ai un formulaire ou je renseigne le nom du serveur, le nom de l'utilisateur et son mot de passe et en clicquant sur un bouton test, je me connecte à Mysql et je liste les bases de données disponibles dans une liste déroulante. Mon code fonctionne mais je n'arrive pas à me débarrasser de l'avertissement suivant
    Avertissement 1 CA2000 : Microsoft.Reliability : Dans la méthode 'Form1.Button1_Click(Object, EventArgs)', appelez System.IDisposable.Dispose sur l'objet 'New MySqlConnection()' avant que toutes les références s'y rapportant ne soient hors de portée.
    Voici le code
    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
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim ConnexionStr As String
            ConnexionStr = "Data Source=" & Me.TextBox1.Text & ";" _
                         & "User Id=" & Me.TextBox2.Text & ";" _
                         & "Password=" & Me.TextBox3.Text & ";" & "Connection Timeout=20"
            Dim cmd As New MySqlCommand
            Try
                cmd.Connection = New MySqlConnection() With {.ConnectionString = ConnexionStr}
                cmd.CommandText = "SHOW DATABASES"
                cmd.CommandType = CommandType.Text
                cmd.Connection.Open()
                Using dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
                    Me.ComboBox1.Items.Clear()
                    Do While dr.Read
                        Me.ComboBox1.Items.Add(dr("Database"))
                    Loop
                    Me.ComboBox1.SelectedIndex = 0
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                cmd.Connection.Close()
                If cmd IsNot Nothing Then cmd.Dispose()
            End Try
        End Sub
    Il ne s'agit que d'un avertissement mais j'aimerais bien comprendre d'où vient le problème.

    Merci d'avance pour vos retours.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    quand on fait dim quelquechose, dans certains cas il faut faire .dispose quand on en a plus besoin
    pour le pourquoi dans certains cas c'est nécessaire, tu peux attendre de connaitre un peu plus le langage avant de faire des recherches la dessus

    pour savoir dans quel cas le faire, tu regardes si la variable te proposes .Dispose

    enfin dans le pire des cas si tu ne le fais pas, un processus viendra le faire automatiquement, par contre on ne sait pas quand (ca peut etre 1 minute après que ton programme n'ai plus besoin de la variable comme 5 heures ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Par défaut
    Merci Pol63 pour ta réponse, mais j'ai malgré tout fait quelques recherches sur la libération des ressources non managées et j'ai appris qu'il était préférable d'utiliser Using plutôt qu'un bloc try catch finally.
    J'ai donc modifié mon code en conséquence et je n'ai plus de message d'avertissement.

    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
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim ConnexionStr As String
            ConnexionStr = "Data Source=" & Me.TextBox1.Text & ";" _
                         & "User Id=" & Me.TextBox2.Text & ";" _
                         & "Password=" & Me.TextBox3.Text & ";" & "Connection Timeout=20"
            Try
                Using connexion As New MySqlConnection(ConnexionStr)
                    connexion.Open()
                    Using cmd As New MySqlCommand
                        With cmd
                            .Connection = connexion
                            .CommandType = CommandType.Text
                            .CommandText = "SHOW DATABASES"
                        End With
                        Using dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
                            Me.ComboBox1.Items.Clear()
                            Do While dr.Read
                                Me.ComboBox1.Items.Add(dr("Database"))
                            Loop
                            Me.ComboBox1.SelectedIndex = 0
                            Me.Button2.Enabled = True
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

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

Discussions similaires

  1. Avertissement compilation 'System.IO.FileNotFoundException'
    Par balabonov dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 02h20
  2. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 18/11/2004, 16h38

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