SqlDataReader à l'intérieur de SqlDataReader
Comment puis-je mettre en œuvre un SqlDataReader
l'intérieur d'un autre SqlDataReader
?
Mon problème est que j'ai un SqlDataReader
. Je suis d'émission while (reader.read())
et à l'intérieur de la boucle while, j'ai créer un autre SqlDataReader
à lire à partir de la base de données. Mais je reçois des exceptions sur une connexion déjà ouverte.
Alors, quelle est la meilleure façon de résoudre mon problème?
Edit:
Je suis à l'aide de clr pour créer mes procédures stockées. J'ai essayé de mettre MultipleActiveResultSets=true;
au sein de la chaîne de connexion à la fois de la clr et le projet, et une exception s'est produite quand j'
testé ma procédure stockée dans SQL Server:
Système.InvalidOperationException: Il y a déjà un DataReader ouvert associé à cette Commande, qui doit d'abord être fermés.
source d'informationauteur scatman | 2010-03-01
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'avoir deux imbriqués les lecteurs de données, ce qui nécessite la ADO.NET "MARS" à la fonctionnalité Multiple Active Result Sets.
Il est disponible en tant que de ADO.NET 2.0, et nécessite un réglage précis (
MultipleActiveResultSets=true;
) dans la chaîne de connexion:Voir ce post de blog pour une excellente discussion.
Une fois que vous avez cela, vous devriez être en mesure d'avoir plus d'un
SqlDataReader
partagés sur le mêmeSqlConnection
dans votre code, et de les utiliser indépendamment l'un de l'autre.Mise à JOUR: ce billet de blog ici mentionne que le MARS fonctionnalité n'est pas disponible à l'intérieur du SQL CLR environnement 🙁 Donc qui ne fonctionne pas à l'intérieur d'une procédure stockée SQL CLR....
La question vous êtes à la rencontre, c'est que vous essayez d'ouvrir de données multiples lecteurs contre la même connexion db. Par défaut, ce qui vous donnera une exception, car il va dire, il y a déjà un associé avec la connexion que vous avez vu.
Vous pourriez faire usage de MultipleActiveResultsetslequel de .NET 2.0 & SQL Server à partir de 2005, vous pouvez spécifier une option supplémentaire dans la chaîne de connexion pour permettre l'activation de plusieurs jeux de résultats à l'égard d'un seul db connexion en ajoutant:
L'alternative est d'utiliser une autre connexion pour ouvrir l'intérieur du lecteur de données contre.
Ou encore, il peut être possible de repenser votre approche originale - peut-être il ya un moyen de le faire sans imbriqués les lecteurs.