1)我注意到在关闭SqlConnection实例后,您仍然可以重新打开相同的连接:
a)你能告诉我幕后发生了什么吗?意思是,在我们关闭文件流对象之后,我们无法重新打开它,而是必须创建一个新对象 - 那么为什么与SqlConnection对象不一样呢?
b)如果启用了池,那么我假设连接对象被返回到连接池,以后可以重用?!
但是我们怎么知道在重新打开连接之后我们会得到与我们最初关闭之前相同的Sqlconnection实例?我问这个是因为据我所知,即使连接池有多个连接可用,这些SqlConnection对象可能与原始SqlConnection对象处于不同状态(“不同状态”我的意思是某些属性可能包含不同的值在“原始”连接对象中)?!
c)如果未启用池,该怎么办? .Net是否“从头开始”重新创建SqlConnection对象? 同样,在我们最初关闭SqlConnection对象之前,我们可能已经更改了某些属性的值?在关闭它之前,编译器将如何知道如何重新创建SqlConnection对象所处的状态?
谢谢
答案 0 :(得分:3)
SqlConnection首先不是“真正的”连接。连接池照顾它。我不确定,但我不会惊讶地发现,如果你重新打开SqlConnection,你可能最终会遇到一个不同的“物理”网络连接。
你可以写一个允许重新打开的FileStream
- 如果它跟踪文件的名称以及底层句柄,它可能只是尝试重新打开它,所有可能的失败等等。它不是很有用。 (不可否认,我不能说我发现能够重新开启SqlConnection
个人有用。)
在知道你将获得“相同的SqlConnection
对象”方面 - 你没有调用返回对SqlConnection
对象的引用的方法,你只是调用一个方法在现有的对象上。该引用不会改变 - 只是对象的状态(或者可能是其引用的其他东西的状态)。
我不知道如果未启用池,会发生什么。它无法创建一个全新的SqlConnection
对象(或者更确切地说,它可以,但不会替换您已经引用的对象)。我怀疑这一切归结为SqlConnection
是“其他东西”的包装 - 而且“其他东西”当然可以重新创建。