使用"使用"时最后关闭SqlConnection

Ere*_*rez 5 .net c# sql

我想关闭最后的SqlConnection,因为使用并没有真正关闭它,连接池变满了.但是我没有意识到什么是正确的方法,因为conn对象在finally部分中不再可达.

try 
{
    using (var conn = new SqlConnection(_dbconnstr)) 
    {
        //...
    }
}
catch (Exception ex)
{
    //...
}
finally 
{
    conn.Close //?!?!?!?!???
}
Run Code Online (Sandbox Code Playgroud)

And*_*rey 14

using (var conn = new SqlConnection(_dbconnstr)) 
{
    //code
}
Run Code Online (Sandbox Code Playgroud)

透露给:

SqlConnection conn = new SqlConnection(_dbconnstr);
try
{
    //code
}
finally
{
    conn.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

所以你应该处理错误,但你可以忘记关闭连接.


Luk*_*keH 8

您不需要connfinally块中关闭.该using块将处理为您关闭连接.(事实上​​,try...finally在这种情况下你根本不需要它,除非你有其他需要处理的资源finally.)

using块将转换为以下内容:

var conn = new SqlConnection(/*...*/);
try
{
    // ...
}
finally
{
    if (conn != null)
        ((IDisposable)conn).Dispose();
}
Run Code Online (Sandbox Code Playgroud)

该对象的Dispose方法SqlConnection将在finally块中调用,该Dispose方法继续Close为您调用.

  • @Claus:我只是解释编译器生成的内容,并且在*try`块之前立即执行赋值,正如我所示.你应该在downvoting之前检查你的事实! (5认同)