我最近开始了解.NET中“连接池”的概念,因此我有点怀疑我希望有人为我澄清它。如果我使用下面的代码,何时将数据库连接返回到池中,以便它可以被应用程序的另一部分使用?
using (SqlConnection NewConnection = new SqlConnection(ConnectionString))
{
using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
{
try
{
NewConnection.Open();
// Do some work...
NewConnection.Close(); // <-- Here?
}
catch
{
// Error handling...
}
}
}
// <-- Here?
非常感谢。
答案 0 :(得分:2)
using
块执行完毕后,确实会将连接返回到池中。
using
statement是syntactic sugar - 编译器生成一个正确的Dispose
块,用于关闭连接,从而将其返回到连接池。
答案 1 :(得分:0)
您需要将SqlConnection
对象和基础连接视为单独的。它是汇集的底层连接。通过明确使用SqlConnection
或Dispose()
块*,可以在using
处置时将其返回到池中。稍后,可能会使用相同的基础连接创建新的(不同的)SqlConnection
。
所以:魔术发生了:
using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
{
...
} <==== here
* =它也可能(我没有检查)被GC
/ finalizer释放回池中 - 但是我们不应该关注它,因为如果发生这种情况你就错了。