2011-09-25 3 views
0

Quand j'ai plusieurs DBDataReaders données de lecture en même temps, je reçois l'erreur suivante:ADO.Net - Avoir plusieurs DBDataReaders en cours d'exécution en même temps?

There is already an open DataReader associated with this Connection which must be 
closed first 

J'ai ConnectionPooling activé dans ma config, donc je ne comprends pas pourquoi je reçois cette erreur. Cela ne suppose-t-il pas de créer une nouvelle connexion puisque ma connexion actuelle est déjà utilisée?

Je sais que la mise en MultipleActiveResultSets true fixerait le problème, mais je suis encore à essayer de comprendre pourquoi le problème existe

Répondre

1

mise en commun de connexion ne fait pas ce que vous pensez.

Si vous faites quelque chose comme ça

var connection = new SqlConnection(connectionString); 
connection.Open(); 
var command = connection.CreateCommand(); 
command.CommandText = // some query 
var reader = command.ExecuteReader(); 
var anotherCommand = connection.CreateCommand(); 
anotherCommand.CommandText = // another query 
var anotherReader = anotherCommand.ExecuteReader(); 

alors tout cela va se passer sur une connexion, si vous avez ou non la mise en commun de connexion.

Le regroupement de connexions conserve uniquement un cache de connexions que vous pouvez utiliser chaque fois que vous créez une nouvelle connexion (new SqlConnection) et que vous l'ouvrez (SqlConnectinon.Open). Lorsque vous fermez une connexion, elle retourne dans le pool pour être réutilisée. Mais un objet ouvert SqlConnection correspond à une connexion du pool. Période.

Questions connexes