You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在using外声明SqlConnection,执行后仍会自动关闭连接吗?(C#/SQL Server)

关于SqlConnection在using语句外声明时的资源释放问题

结论

会自动关闭实际连接,而非副本。

原因解释

  1. using语句的核心作用是确保实现了IDisposable接口的对象,在代码块执行完毕后(无论正常结束还是抛出异常),都会调用其Dispose()方法。
  2. SqlConnection实现了IDisposable接口,它的Dispose()方法会自动处理连接:
    • 如果当前连接处于打开状态,会先调用Close()关闭连接
    • 随后将连接归还到ADO.NET连接池(默认启用)
  3. 你的代码中,虽然cn是在using外部声明的,但using (cn)传入的是该对象的引用,并非副本。using块执行完毕后,会对这个实际的SqlConnection对象调用Dispose(),自然会关闭对应的实际连接。

补充说明

  • 哪怕你手动打开过连接(比如调用cn.Open()),只要进入using块,结束时都会自动关闭,不需要额外调用Close()。
  • 这种写法和在using内部声明对象(using (var cn = new SqlConnection(...)))的效果完全一致,只是对象声明的位置不同而已。

内容的提问来源于stack exchange,提问作者KWallace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:50:22