Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重新打开SqlConnection实例_C#_.net_Asp.net - Fatal编程技术网

C# 重新打开SqlConnection实例

C# 重新打开SqlConnection实例,c#,.net,asp.net,C#,.net,Asp.net,1) 我注意到,在关闭SqlConnection实例后,仍然可以重新打开相同的连接: a) 你能告诉我幕后发生了什么吗?这意味着,在关闭文件流对象之后,我们不能重新打开它,而是必须创建一个新对象——那么为什么SqlConnection对象不一样呢 b) 如果启用了池,那么我假设连接对象返回到连接池,以后可以重用 但是,我们怎么知道在重新打开连接之后,我们会得到与最初关闭它之前相同的Sqlconnection实例呢?我这样问是因为据我所知,即使连接池有几个可用的连接,这些SqlConnection

1) 我注意到,在关闭SqlConnection实例后,仍然可以重新打开相同的连接:

a) 你能告诉我幕后发生了什么吗?这意味着,在关闭文件流对象之后,我们不能重新打开它,而是必须创建一个新对象——那么为什么SqlConnection对象不一样呢

b) 如果启用了池,那么我假设连接对象返回到连接池,以后可以重用

但是,我们怎么知道在重新打开连接之后,我们会得到与最初关闭它之前相同的Sqlconnection实例呢?我这样问是因为据我所知,即使连接池有几个可用的连接,这些SqlConnection对象也可能处于与原始SqlConnection对象不同的状态(我所说的“不同状态”是指某些属性可能持有与“原始”连接对象不同的值)

c) 如果没有启用池怎么办?.Net是否“从头开始”重新创建SqlConnection对象? 同样,在我们最初关闭SqlConnection对象之前,我们可能已经更改了一些属性的值?在我们关闭SqlConnection对象之前,编译器如何知道如何重新创建它所处的状态


谢谢

SqlConnection一开始并不是直接的“真正”连接。连接池负责这一点。我不确定,但如果重新打开SqlConnection,可能会出现另一个“物理”网络连接,我不会感到惊讶

您可以编写一个允许重新打开的
FileStream
,如果它跟踪文件名以及底层句柄,它可以尝试重新打开它,包括所有可能的故障等。这不是很有用。(无可否认,我个人并不认为能够重新打开
SqlConnection
很有用。)

就知道您将获得“相同的
SqlConnection
对象”而言,您并不是在调用返回对
SqlConnection
对象引用的方法,而是在现有对象上调用方法。该引用不会改变-只是对象的状态(或者它引用的其他对象的状态)

如果不启用池,我不知道会发生什么。它不能创建一个全新的
SqlConnection
对象(或者说它可以,但它不能替换您已经引用过的对象)。我怀疑这一切都归结为
SqlConnection
是“其他东西”的包装器,“其他东西”肯定可以重新创建