Vb datareader deja ouvert

Résolu/Fermé
bebenul - 9 nov. 2011 à 17:28
 bebenul - 10 nov. 2011 à 18:09
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
A voir également:

6 réponses

Utilisateur anonyme
9 nov. 2011 à 19:10
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
Utilisateur anonyme
10 nov. 2011 à 17:38
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
10 nov. 2011 à 17:58
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
1