结束使用关闭打开的SQL连接

时间:2008-12-17 21:18:00

标签: .net sql sql-server vb.net

如果我在一个Using中包装一个SQLConnection,我应该关闭它还是使用句柄来结束它?

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 

6 个答案:

答案 0 :(得分:96)

退出using块会对相关对象(在您的示例中为cn)调用.Dispose(),对于SqlConnection,它将关闭连接和任何打开的资源。

答案 1 :(得分:31)

更准确地说,调用Dispose或Close会将底层物理连接标记为“未使用” - 但并未真正关闭它。因此,尚未物理关闭的“未使用”连接可用于合并。因此 - 调用Dispose将返回到连接池的连接。

答案 2 :(得分:12)

根据MSDN,您不需要关闭声明。

“以下示例创建一个SqlConnection,打开它,显示它的一些属性。连接在using块的末尾自动关闭。” - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

答案 3 :(得分:4)

虽然SQL的Dispose方法确实关闭了连接(最终根据darin),但你应该在那里保持对Close的调用。原因是你将依赖于Dispose的底层实现来调用close。同时看到一个没有关闭的Open就像在我们这些用非托管语言编程的人中看到一个没有删除的New。这对我来说是一种代码味道。

答案 4 :(得分:2)

"使用块的行为类似于Try ... Finally构造,其中Try块使用资源而Finally块处理它们。因此,无论您如何退出块,使用块都可以保证资源的处理。即使在未处理的异常的情况下也是如此,除了StackOverflowException。"
https://msdn.microsoft.com/en-us/library/htd05whh.aspx

答案 5 :(得分:1)

使用只是尝试/最后的简写。这是您发布的内容的等效代码

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

Dispose应该处理所有资源清理,如果是连接,它将关闭它。