使用语句和连接池

时间:2011-06-06 12:05:05

标签: .net sql-server-2005 connection-pooling

我最近开始了解.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?

非常感谢。

2 个答案:

答案 0 :(得分:2)

using块执行完毕后,确实会将连接返回到池中。

using statementsyntactic sugar - 编译器生成一个正确的Dispose块,用于关闭连接,从而将其返回到连接池。

答案 1 :(得分:0)

您需要将SqlConnection对象和基础连接视为单独的。它是汇集的底层连接。通过明确使用SqlConnectionDispose()块*,可以在using处置时将其返回到池中。稍后,可能会使用相同的基础连接创建新的(不同的)SqlConnection

所以:魔术发生了:

using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
{
    ...
} <==== here

* =它也可能(我没有检查)被GC / finalizer释放回池中 - 但是我们不应该关注它,因为如果发生这种情况你就错了。