2009-02-27 8 views
1

1) Je remarque que, après avoir fermé exemple SqlConnection, vous êtes toujours en mesure de rouvrir la même connexion:Réouverture SqlConnection instance

a) pouvez-vous me dire ce qui se passe dans les coulisses? Ce qui signifie, après que nous fermons l'objet de flux de fichier, nous ne pouvons pas le rouvrir, mais au contraire créer un nouvel objet - alors pourquoi n'est-ce pas la même chose avec les objets SqlConnection?

b) Si le regroupement est activé, alors je suppose que l'objet de connexion est renvoyé au pool de connexions et peut être réutilisé par la suite ?!

Mais alors, comment savons-nous que, après avoir rouvert la connexion, nous obtiendrons la même instance Sqlconnection qu'avant de la fermer? Je pose cette question parce que pour autant que je sache, même si le pool de connexion a plusieurs connexions disponibles, ces objets SqlConnection pourraient être dans un état différent de l'objet original SqlConnection (par "état différent" je veux dire que certaines propriétés pourraient contenir des valeurs différentes dans l'objet de connexion "original") ?!

c) Que se passe-t-il si le regroupement n'est pas activé? Est-ce que .Net recréer l'objet SqlConnection "à partir de zéro"? Encore une fois, avant de fermer l'objet SqlConnection, nous avons peut-être modifié les valeurs de certaines propriétés. Comment le compilateur saura-t-il recréer l'état dans lequel se trouvait l'objet SqlConnection avant de le fermer?

merci

Répondre

3

SqlConnection est pas directement la connexion « réel » en premier lieu. Le pool de connexion s'occupe de cela. Je ne sais pas avec certitude, mais je ne serais pas surpris de constater que si vous rouvrez le SqlConnection vous pourriez vous retrouver sur une autre connexion réseau "physique".

Vous pouvez écrire un FileStream qui a permis la réouverture - si elle a gardé une trace du nom du fichier ainsi que la poignée sous-jacente, il pourrait juste essayer de le rouvrir, avec toutes les pannes possibles, etc. Il est tout simplement pas très utile. (Je ne peux pas dire que je trouve pouvoir rouvrir SqlConnection utile personnellement, certes.)

En sachant que vous obtiendrez "le même objet SqlConnection" - vous n'appelez pas une méthode qui renvoie un référence à un objet SqlConnection, vous appelez simplement une méthode sur un objet existant. Cette référence ne changera pas - juste l'état de l'objet (ou éventuellement l'état de quelque chose d'autre auquel il se réfère).

Je ne sais pas ce qui se passerait si la mise en commun n'était pas activée. Il ne pourrait pas créer un nouvel objet SqlConnection (ou plutôt il pourrait, mais ce ne serait pas remplacer celui que vous avez déjà eu une référence à). Je pense que tout se résume à SqlConnection étant une enveloppe autour de "quelque chose d'autre" - et le "quelque chose d'autre" pourrait certainement être recréé.

Questions connexes