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

rjr*_*son 64 .net sql vb.net sql-server

如果我在一个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 
Run Code Online (Sandbox Code Playgroud)

mat*_*t b 96

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

  • 换句话说:是的. (42认同)
  • Joel Coehoorn是的.很暧昧.完整的答案是:"你不需要关闭,因为最终使用处理它" (10认同)
  • 如果在使用块中抛出异常会发生什么?连接是否仍会被处理? (3认同)

Dar*_*rov 31

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

  • 为什么检查错误的答案?很明显,close/dispose实际上并没有关闭连接,而是将它带回游泳池. (2认同)

Hec*_*rea 12

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

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