【问题标题】: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...
}
【问题讨论】:
标签:
c#
.net
.net-core
ado.net
【解决方案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 关键字的放置对连接对象的作用或外观没有任何影响。