[英]Close SqlConnection in the Finally when using “Using”
我想关闭最后的SqlConnection,因为使用并没有真正关闭它,连接池变满了。 但是我没有意识到什么是正确的方法,因为conn对象在finally部分中不再可达。
try
{
using (var conn = new SqlConnection(_dbconnstr))
{
//...
}
}
catch (Exception ex)
{
//...
}
finally
{
conn.Close //?!?!?!?!???
}
using (var conn = new SqlConnection(_dbconnstr))
{
//code
}
透露给:
SqlConnection conn = new SqlConnection(_dbconnstr);
try
{
//code
}
finally
{
conn.Dispose();
}
所以你应该处理错误,但你可以忘记关闭连接。
您不需要在finally
块中关闭conn
。 using
块将处理为您关闭连接。 (事实上,在这种情况下,你可能根本不需要try...finally
除非你有其他资源需要在finally
处理。)
using
块将转换为如下所示:
var conn = new SqlConnection(/*...*/);
try
{
// ...
}
finally
{
if (conn != null)
((IDisposable)conn).Dispose();
}
该Dispose
的方法SqlConnection
对象将在被称为finally
的块,以及Dispose
方法继续呼吁Close
你。
退出using块会在对象上调用.Dispose()
,因为SqlConnection
将关闭连接和任何打开的资源。
所以try
, finally
阻止是不需要的。
根据我的理解,连接对象的Dispose()方法将关闭Connection。 您不需要显式调用Connection.Close。
你Using
关闭连接的方式是好的。 也许您可能忘记关闭一些DataReader了?
AFAIK,以下使用声明:
using (var conn = new SqlConnection(_dbconnstr))
{
}
相当于:
SqlConnection conn;
try
{
//`using` scope operations are executed here
conn = new SqlConnection(_dbconnstr));
}
catch
{
//exceptions are bubbled
throw;
}
finally
{
//Dispose is always called
conn.Dispose();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.