我想关闭最后的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)
所以你应该处理错误,但你可以忘记关闭连接.
您不需要conn在finally块中关闭.该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为您调用.