这两个到 ADO.NET 的连接是不是相同(启用了连接池)?

Posted

技术标签:

【中文标题】这两个到 ADO.NET 的连接是不是相同(启用了连接池)?【英文标题】:Are these two connections to ADO.NET the same (with connection pooling enabled)?这两个到 ADO.NET 的连接是否相同(启用了连接池)? 【发布时间】:2022-01-13 08:36:36 【问题描述】:

第二种用法(代码sn-p 2)有问题吗?如果有,有什么问题?

// ---Code snippet 1---
IDbConnection connection = new SqlConnection(connStr)
using(connection)

    connection.Open(); // Open a connection in “using”
    todo...



// ---Code snippet 2---
IDbConnection connection = new SqlConnection(connStr)
connection.Open(); // Open a connection outside “using”
using(connection) 
 
    todo...

【问题讨论】:

【参考方案1】:

using 语句只是用于正确处理IDisposable 对象的内置语言支持,使用它可以确保您的一次性对象在应有的时候被丢弃。

它基本上转换为 try-finally 对,在 finally 块中有一个 dispose 调用。 你可以阅读更多关于 using 语句here。

也就是说,您应该将 using 关键字放在创建一次性对象的第一条语句中,因此您的代码的正确版本是:

using (var connection = new SqlConnection(connStr))

    connection.Open(); // Open a connection in “using”
    todo...

我认为 using 关键字的放置对连接对象的作用或外观没有任何影响。

【讨论】:

或者换句话说:问题中的两个版本都是错误的

以上是关于这两个到 ADO.NET 的连接是不是相同(启用了连接池)?的主要内容,如果未能解决你的问题,请参考以下文章

ADO.NET中的TransactionScope何时需要启用MSTDC(分布式事务管理)

ADO.NET基础巩固-----连接类和非连接类

要安装啥 Oracle ADO.NET 连接器?

Silverlight 启用 WCF 服务、Web 服务、ADO.NET 数据服务

ASP.NET ADO.NET 和C#编程语言他们之间的关系是怎样的?

实体框架寻找 ADO.NET 提供程序 SqlServerCe.3.5 而不是 4.0