using (IDbConnection dbConn = new System.Data.SqlClient.SqlConnection(ConnectionString))
{
dbConn.Open();
...
return result;
}
- using 中的 dbConn.Open() 会使用不同的连接池吗?
- 如果问题 1 为真并且代码到达返回值,此代码是否会留下 2 个打开的连接挂起?
using (IDbConnection dbConn = new System.Data.SqlClient.SqlConnection(ConnectionString))
{
dbConn.Open();
...
return result;
}
using 中的 dbConn.Open() 会使用不同的连接池吗?
只有一个“连接池”。
如果问题 1 为真并且代码到达返回值,此代码是否会留下 2 个打开的连接挂起?
那么问题 1 是错误的,但这是实际发生的情况:
Open()
时,连接对象从池中请求一个现有的数据库连接,如果池没有,则创建一个(也许池实际上创建了它,但这是一个实现细节)所以只有一个连接对象和一个数据库连接。当 using 块超出范围时(通过完成或我抛出异常),它会自动处理。
它将创建一个新连接,然后在 using 块到达末尾时将其处理掉。当您不再需要它时关闭连接是个好主意,如果您在 using 块中进行更多操作,但 using 块会处理它。
当代码到达 return 时,它会退出 using 语句,然后进行处理。它不像它会返回并且不会完成,以防万一这就是您所要求的。一旦执行离开该范围,就会调用 dispose。即使您遇到异常,也会调用 Dispose。
一个 using 块被编译成一个 try catch finally 块并且 finally 总是被执行并且 finally 包含 Dispose