MySqlDataReader et MySqlConnection

MySqlDataReader et MySqlConnection - C#/.NET managed - Programmation

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

Reply

Marsh Posté le 30-09-2010 à 22:52:54   

Reply

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

Message cité 1 fois
Message édité par TotalRecall le 01-10-2010 à 22:04:04

---------------
Topic .Net - C# @ Prog
Reply

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

Reply

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 :)
:hello:

 

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.


Message édité par TotalRecall le 02-10-2010 à 22:48:28

---------------
Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed