Vb datareader deja ouvert

Résolu
bebenul -  
 bebenul -
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. Utilisateur anonyme
     
    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
  2. bebenul
     
    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
  3. Utilisateur anonyme
     
    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
  4. bebenul
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
  7. bebenul
     
    Merci je pense que je dois proceder pareille
    Merci encore Lupin pour ton soutien

    bebenul
    1