Vb datareader deja ouvert

Résolu
Bonjour,

j'ai un petit souci, ce code ci-dessous m'affiche l'erreur <<Un DataReader associé à cette commande est déjà ouvert. Il doit d'abord être fermé>> kan je ve clik a nouveau sur un bouton se trouvant sur mon form. la premiere fois ça marche à la seconde fois il m'affiche l'erreur

Dim returnVa As New Object
Dim comd As New SqlCommand

Req = "SELECT * FROM " + Table+ " WHERE " + FieldId+ " ='" + Id+ "'"
comd.CommandType = CommandType.Text
comd.CommandText = Req
comd.Connection = con

returnVa = comd.ExecuteReader()
comd.Dispose()

quelqu'un peut m'aider?
Merci

6 réponses

  1. Merci je pense que je dois proceder pareille
    Merci encore Lupin pour ton soutien

    bebenul
    1. re :

      seulement si tu as des problèmes de performance.

      Ça dépend beaucoup du nombre d'enregistrements à traiter.

      Jusqu'a ce jour, j'ai toujours fermé ma connexion.

      Ouverture
      Lecture
      Fermeture

      Idem pour Insertion et MiseÀJour.

      Cdt

      Lupin
      1. Merci lupin pour ton aide, j'ai voulu centralisé sqlConnex comme ça quand j'ai besoin de lui je l'appel à n'importe quel moment je ne sais pas si ma maniere de procédé est bonne. mais finalement j'ai créer une methode getconnexion() que j'appel puis j'utilise

        Dim returnVa As New Object
        Dim comd As New SqlCommand
        Dim con As New SqlConnection
        con = getConnexion()
        con.Open()
        ......
        ......
        et ici je ferme la connexio
        con.close

        ça marche nikelement bien
        parcontre j'aimerai savoir si ma variable sqlconnex c'est bien de la laissé open
        1. re:

          à quel moment fais-tu un [ sqlConnex.Close ]

          pour être capable de lire tu dois sans doute

          faire un sqlConnex.Open ???

          comment défini tu [ sqlConnex ].

          ta syntaxe de lecture est complexe pour rien,

          tu aurais pu pour la lecture faire comme ceci :

          Dim MonAdapteur As OleDb.OleDbDataAdapter = Nothing
          Dim MonDataTable As DataTable = Nothing
          Dim MonDataSet As New DataSet()

          Dim sqlConnex As New OleDb.OleDbConnection()

          sqlConnex .ConnectionString = "Provider=Microsoft.Jet.OleDB.4.0;" & "Data Source= " & Chemin & ";"
          sqlConnex.Open()

          Dim reqSQL As String = "SELECT * FROM " + Table+ " WHERE " + FieldId+ " ='" + Id+ "'"

          MonAdapteur = New OleDbDataAdapter(reqSQL, Connexion)
          MonAdapteur.Fill(MonDataSet, "NomDeLaTable")
          MonDataTable = MonDataSet.Tables("NomDeLaTable")

          Return MonDataTable

          Cdt

          Lupin
          1. Merci pour ta réponse,
            j'ai forcé avec un try catch mais toujours la meme erreur.
            au fait j'aimerai dans mon formulaire avant insertion d'une donnée verifié si l'identifiant existe déja dans la base.
            La premiere tentative ça passe sans probleme, il me ramene les données si je click une seconde fois sur le bouton insertion de mon formulaire il cause se probleme.
            Es ce il ya un autre moyen pour pouvoir voir si un enregistrement exist dans la base hors mis la maniere dont je procede. ou bien comment pallier à ce probleme
            voila la modification du try catch:

            Dim returnVa As New Object
            Dim comd As New SqlCommand
            Try
            Req = "SELECT * FROM " + Table+ " WHERE " + FieldId+ " ='" + Id+ "'"
            comd.CommandType = CommandType.Text
            comd.CommandText = Req
            comd.Connection = sqlConnex
            returnVa = comd.ExecuteReader()
            comd.Dispose()

            Catch ex As Exception
            Finally
            comd.Dispose()
            End Try
            Return returnVa

            Merci de votre aide
            1. Bonjour,

              Force le dispose avec un [ Try Catch Finnaly ]

              Try
              	comd.Connection = con
              	returnVa = comd.ExecuteReader()
              	comd.Dispose()
              
              Catch ex As Exception
              
              Finally
              	comd.Dispose()
              End Try
              


              Cdt

              Lupin