-1
using (IDbConnection dbConn = new System.Data.SqlClient.SqlConnection(ConnectionString))
{
    dbConn.Open();
    ...
    return result;
}
  1. using 中的 dbConn.Open() 会使用不同的连接池吗?
  2. 如果问题 1 为真并且代码到达返回值,此代码是否会留下 2 个打开的连接挂起?
4

2 回答 2

1

using 中的 dbConn.Open() 会使用不同的连接池吗?

只有一个“连接池”。

如果问题 1 为真并且代码到达返回值,此代码是否会留下 2 个打开的连接挂起?

那么问题 1 是错误的,但这是实际发生的情况:

  • using 语句中的代码创建连接对象
  • 当你调用Open()时,连接对象从池中请求一个现有的数据库连接,如果池没有,则创建一个(也许池实际上创建了它,但这是一个实现细节)
  • 当块结束(或抛出异常)时, using 块超出范围并释放连接对象,从而关闭并释放数据库连接。

所以只有一个连接对象和一个数据库连接。当 using 块超出范围时(通过完成或我抛出异常),它会自动处理。

于 2020-07-16T18:43:42.617 回答
0

它将创建一个新连接,然后在 using 块到达末尾时将其处理掉。当您不再需要它时关闭连接是个好主意,如果您在 using 块中进行更多操作,但 using 块会处理它。

当代码到达 return 时,它会退出 using 语句,然后进行处理。它不像它会返回并且不会完成,以防万一这就是您所要求的。一旦执行离开该范围,就会调用 dispose。即使您遇到异常,也会调用 Dispose。

一个 using 块被编译成一个 try catch finally 块并且 finally 总是被执行并且 finally 包含 Dispose

于 2020-07-16T14:47:00.423 回答