comment fermer la connexion/datareader lors de l'utilisation de SqlDataSource ou ObjectDataSource
au cours de bêta test, nous avons découvert le regroupement de connexion, les messages d'erreur . Donc j'ai été en passant par le code et la fermeture de la SqlDataReader objets partout où ils ont été laissé ouvert. Ce que j'ai besoin de savoir, c'est comment fermer un datareader (ou si il y a un besoin de proximité) qui est spécifié dans le SelectStatement attribut de la SqlDataSource ou ObjectDataSource balises. Pourrait-il y avoir de connexion de la fuite, si elles ne sont pas traitées?
Merci d'avance !
Vous devez vous connecter pour publier un commentaire.
J'ai tendance à utiliser la fonction "aide" mot-clé, surtout lorsqu'il s'agit de l'ouverture et de la fermeture des connexions à une base de données. "à l'aide" est un raccourci pour le modèle dispose - ici est un lien vers le site web MSDN article, et ici est un lien vers un blog utile d'entrée avec un aperçu.
Pour améliorer les performances de Close()/Dispose() envisager la convocation d'Annuler() sur la commande associée objet avant de l'éliminer ou de la fermeture du lecteur, surtout quand vous n'avez pas atteint la fin du jeu d'enregistrements.
Par exemple:
Ma compréhension est que, avec
SqlDataSource
, la gestion de la connexion est effectuée pour vous, et vous n'avez rien à craindre.ObjectDataSource
ne parle pas à la base de données directement à la première place, de sorte qu'il sera en sécurité -- aussi longtemps que l'objet sous-jacent effectue sa connexion et lecteur de gestion correctement.Comme d'autres l'ont mentionné,
Close()
etusing
sont vos amis pour les classes que vous utilisez avecObjectDataSource
.Mon intuition est que si vous avez nettoyée de la base de code de manière efficace, vous avez probablement éradiquer le problème.
Nous avons eu les mêmes problèmes ici, dans un environnement de production.
Résolu le problème. Le premier problème était, il n'y avait pas l'aide d'instructions à tous dans mon code.
(Il a été construit il y a quelques années, avec moins de connaissances).
J'ai ensuite essayé de mettre le SqlDataSource dans une clause using. Mais cela n'a pas aide non plus.
Le truc c'est que, tout comme tvanfosson et Mischa sont ce qui suggère, en mettant le lecteur dans une clause using. C'est l'objet qui ferme la connexion.
Le nombre de connexions réduit au minimum la taille du pool de 10 à charge moyenne.
Appel .Dispose() de la poignée nettoyer et libérer tout lieu de ressources, mais la .La méthode Close() doit être appelé ainsi lorsqu'un objet est en fait la lecture à partir du lecteur.
Je crois que le SqlDataSource va gérer sa propre connexion/lecteur de problèmes, donc pas de soucis là. Comme pour vos connexions manuelles, j'ai trouvé ce modèle utile dans le passé:
Je suis d'accord, que pour l'ObjectDataSource la clôture doit être traitée par son mode de sélection. Mon ObjectDataSource Sélectionnez la méthode retourne un SqlDataReader. Mon souci c'est que ... sera le SqlDataReader être rendu inutilisable lorsqu'il est fermé après le retourner à l'INTERFACE utilisateur. voir, par exemple, l'exemple de code suivant. Je ne l'ai pas essayé et ne veulent pas le faire à ce stade de développement.
Merci pour toutes les contributions reçues jusqu'à présent !
...........
.