MySqlDataReader et MySqlConnection - C#/.NET managed - Programmation
Marsh Posté le 01-10-2010 à 22:02:44
Si je peux me permettre c'est pas vraiment une question de provider, il me semble que dès que tu travailles en mode connecté (Datareader) tu rencontres ce genre de soucis, peu importe le provider et le SGBD derriere.
Toujours de mémoire, en ADO Net 2, il y a une solution de contournement qui s'appuie sur un principe appelé MARS (Multiple Active Records Set) qui commence par l'utilisation d'un paramètre spécial dans la chaîne de connexion (MultipleActiveResultSets=true).
Sinon évidemment il y a la solution d'utiliser plusieurs connexions mais bon...
Marsh Posté le 02-10-2010 à 10:59:59
L'utilisation de plusieurs connexions
c-a-d je dois écrire :
dim cn as New MySqlConnection
cn.ConnectionString = blablabla
cn.Open
à chaque fois et cette opération prend un espace de temps assez important vu que la procédure où se trouvent les DataReader est appelée à des intervalles de quelques millisecondes
Marsh Posté le 02-10-2010 à 22:47:12
Ah ok ! Oui formulé comme ça c'est parfaitement juste, j'avais en fait interprété ton post dans le sens : "l'impossibilité d'ouvrir plusieurs DataReader avec une connexion unique est une spécificité du provider mysql, avec les autres ça fonctionne". C'est vrai que tu étais très vite passé sur la question, ta phrase était un peu ambigue et j'ai choisi la mauvaise interprétation possible. Enfin c'est sans importance, tant qu'on se comprend tous
edit : et pour ce qui est du fait que le truc dont je parle est une spécificité sqlserver, désolé là c'est ma faute, sur le coup je n'y prêtais pas attention.
Marsh Posté le 30-09-2010 à 22:52:54
Bonjour,
j'ai déclaré une connexion Cn comme une variable public
public Cn As New MySqlConnection
dans la form_load de ma feuille je me connecte à la BD
Cn.ConnectionString = "Server=" & serveur_bd & ";Database=bd;Uid=root;Pwd=" & mdp & ";"
Cn.Open
J'ai une procedure comme suit :
Private Function Ma_Fonction(ByVal ido As Int16) As List(Of String)
Dim r As New List(Of String)
Dim cmd As MySqlCommand
Dim dr As MySqlDataReader
cmd = New MySqlCommand("select * from maTable where id=" & ido, Cn)
dr = cmd.ExecuteReader
Do While dr.Read
r.Add(dr.Item("info" ))
Loop
dr.Close()
Return r
End Function
Jusque là ça marche
Mais comme j'utilise le Multithreading, cette fonction peut être appelée par 2 threads au même instant ce qui engendre l'erreur
There is already an open DataReader associated with this Connection which must be closed first
Comment faire ?
Merci