Erreur logique Try Catch

Yurf98 Messages postés 10 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 10 juillet 2008 - 10 juil. 2008 à 14:34
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 - 10 juil. 2008 à 19:24
Voila. J ai ecris des fonctions, et j essai d implementer avec des try catch finally.


J ai donc par exemple la fonction suivantes:

Public Sub Load_ProductType(ByRef combobox As ComboBox)

        'Load product type in combobox and listbox


        Dim com_sql As New SqlClient.SqlCommand

        Dim dr_sql As SqlClient.SqlDataReader

        com_sql.Connection = Form_Main.SqlConnection1

        com_sql.CommandType = CommandType.Text


        com_sql.CommandText = "SELECT  Name_product_type FROM Product_type ORDER BY Name_product_type"

        Try

            Form_Main.SqlConnection1.Open()

            dr_sql = com_sql.ExecuteReader


            Do While dr_sql.Read() = True

                combobox.Items.Add(dr_sql.GetSqlString(0))

            Loop

        Catch ex As Exception


            add_log(ex.Message, "Load_Product")

            Throw

        Finally

            dr_sql.Close()

            Form_Main.SqlConnection1.Close()

            dr_sql.Dispose()

        End Try


    End Sub


J ai un Warning sur dr_sql.Close(). En effet si y a un bug sur: Form_Main.SqlConnection1.Open(), Il va aller au catch puis finally. Il va donc avoir du mal a close quelque chose qui n a pas de valeur....


Y aurai t  il une personne avec une idee lumineuse.

3 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
10 juil. 2008 à 18:12
     Try
            Form_Main.SqlConnection1.Open()
            dr_sql = com_sql.ExecuteReader

            Do While dr_sql.Read() = True
                combobox.Items.Add(dr_sql.GetSqlString(0))
            Loop
     dr_sql.Close()
            Form_Main.SqlConnection1.Close()
            dr_sql.Dispose()

        Catch ex As Exception

            add_log(ex.Message, "Load_Product")
            Throw
        Finally
               End Try
0
Yurf98 Messages postés 10 Date d'inscription samedi 9 décembre 2000 Statut Membre Dernière intervention 10 juillet 2008
10 juil. 2008 à 19:20
Et bien merci d abord.

Mais alors ma question est la suivante:

Si je ne Close() pas dans le finally, que le try leve une exception...

Je ne Close() jamais? N est ce pas important?
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
10 juil. 2008 à 19:24
tu peux le fermer aussi dans le catch
   Try
            Form_Main.SqlConnection1.Open()
            dr_sql = com_sql.ExecuteReader

            Do While dr_sql.Read() = True
                combobox.Items.Add(dr_sql.GetSqlString(0))
            Loop
     dr_sql.Close()
            Form_Main.SqlConnection1.Close()
            dr_sql.Dispose()

        Catch ex As Exception
  dr_sql.Close()
            Form_Main.SqlConnection1.Close()
            dr_sql.Dispose()

            add_log(ex.Message, "Load_Product")
            Throw
        Finally
               End Try
0
Rejoignez-nous