这两个到 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(分布式事务管理)
Silverlight 启用 WCF 服务、Web 服务、ADO.NET 数据服务