使用“使用”时最后关闭SqlConnection

我想关闭最后的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块中关闭connusing块将处理为您关闭连接。 (事实上​​,在这种情况下,你可能根本不需要try...finally除非你有其他资源需要在finally处理。)

using块将转换为以下内容:

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

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

退出using块会在对象上调用.Dispose() ,因为SqlConnection将关闭连接和任何打开的资源。

所以tryfinally阻止是不需要的。

根据我的理解,连接对象的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(); }