结束使用closures打开的SQL连接

如果我在一个使用中包装一个SQLConnection,我应该closures它还是使用处理结束?

using cn as new system.data.sqlclient.sqlconnection() cn.open '{do a bunch of other stuff with commands and datareaders here} cn.close 'Do I need this? end using 

退出一个使用块调用.Dispose()的问题(在你的例子中的cn )为SqlConnection将closures连接和任何打开的资源。

更确切地说,调用Dispose或Close会把底层的物理连接标记为“Not in use”,但是并不真正closures它。 尚未物理closures的“未使用”连接因此可用于合并。 因此,调用Dispose将返回到连接池的连接。

根据MSDN你不需要closures声明。

“下面的示例创build一个SqlConnection,打开它,显示它的一些属性,连接在使用块的末尾自动closures。 – http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

虽然SQL的Dispose方法确实closures了连接(最终根据darin),但您应该将呼叫留在那里。 原因是您将依靠Dispose的底层实现来调用close。 另外看到一个没有closures的开放就像看到一个新的没有删除我们这些已经编程在非托pipe语言。 这对我来说是一种代码味道。

“使用块的行为就像一个Try …最后的构造,其中Try块使用资源,Finally块处理它们。因此,无论您如何退出块,Using块都保证处理资源。即使在未处理的exception的情况下也是如此,除了StackOverflowException。
https://msdn.microsoft.com/en-us/library/htd05whh.aspx

使用只是简单的尝试/最后。 这是你发布的等价代码

 Try SqlConnection cn as new system.data.sqlclient.sqlconnection() cn.open '{do a bunch of other stuff with commands and datareaders here} cn.close 'Do I need this? Finally cn.Dispose() End Try 

处置应该照顾所有的资源清理,在连接的情况下,它会closures它。