Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# OledbConnection.Dispose()是否关闭连接?_C#_.net_Dispose_Oledbconnection - Fatal编程技术网

C# OledbConnection.Dispose()是否关闭连接?

C# OledbConnection.Dispose()是否关闭连接?,c#,.net,dispose,oledbconnection,C#,.net,Dispose,Oledbconnection,可能重复: OledbConnection.Dispose()是否关闭连接 我知道SqlConnection可以,但是OledbConnection呢?是的。如果它没有,那么它就不能完全处置它的资源。BinaryReader、BinaryWriter等都会关闭底层流是的,它也会关闭。 资料来源: Dispose方法调用Close,并从中删除OleDbConnection 连接池 有关详细信息,请参阅参考链接上的备注部分,了解释放托管和非托管资源的情况。是: Dispose方法调用Close,并

可能重复:

OledbConnection.Dispose()是否关闭连接


我知道
SqlConnection
可以,但是
OledbConnection
呢?

是的。如果它没有,那么它就不能完全处置它的资源。BinaryReader、BinaryWriter等都会关闭底层流

是的,它也会关闭。

资料来源:

Dispose方法调用Close,并从中删除OleDbConnection 连接池

有关详细信息,请参阅参考链接上的
备注
部分,了解释放托管和非托管资源的情况。

是:

Dispose方法调用Close,并从连接池中删除OleDbConnection

请注意,以上内容来自.NET Framework 1.1。但是(在这种情况下)你可以相信事情没有改变

此外,您几乎可以100%确定每个实现
IDbConnection
的类都将在
Dispose
方法中“关闭”连接-无论这对特定实现意味着什么都不相关,但这相当于手动调用
close


每一个不以这种方式运行的实现都应该被我认为是失败的。

这里是最终的证明。。
Dispose
方法的实际代码,使用反射器获取:

// System.Data.OleDb.OleDbConnection
protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        this._userConnectionOptions = null;
        this._poolGroup = null;
        this.Close();
    }
    this.DisposeMe(disposing);
    base.Dispose(disposing);
}

是的,根据MSDN上的文档,
OleDbConnection.Dispose()
也会调用
OleDbConnection.Close()

为什么您认为有区别?是的。与其调用.Dispose,不如尝试将处理连接的
using
块,因为
using
块中的代码将完成执行。@AmiramKorach:人们只讨论了
SqlConnection
DbConnection
是一个抽象类,因此它取决于
OledbConnection
的实际实现。