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. 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
    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. 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 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 :

            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 je pense que je dois proceder pareille
              Merci encore Lupin pour ton soutien

              bebenul