在using外声明SqlConnection,执行后仍会自动关闭连接吗?(C#/SQL Server)
关于SqlConnection在using语句外声明时的资源释放问题
结论
会自动关闭实际连接,而非副本。
原因解释
using语句的核心作用是确保实现了IDisposable接口的对象,在代码块执行完毕后(无论正常结束还是抛出异常),都会调用其Dispose()方法。SqlConnection实现了IDisposable接口,它的Dispose()方法会自动处理连接:- 如果当前连接处于打开状态,会先调用
Close()关闭连接 - 随后将连接归还到ADO.NET连接池(默认启用)
- 如果当前连接处于打开状态,会先调用
- 你的代码中,虽然
cn是在using外部声明的,但using (cn)传入的是该对象的引用,并非副本。using块执行完毕后,会对这个实际的SqlConnection对象调用Dispose(),自然会关闭对应的实际连接。
补充说明
- 哪怕你手动打开过连接(比如调用
cn.Open()),只要进入using块,结束时都会自动关闭,不需要额外调用Close()。 - 这种写法和在
using内部声明对象(using (var cn = new SqlConnection(...)))的效果完全一致,只是对象声明的位置不同而已。
内容的提问来源于stack exchange,提问作者KWallace
相关产品推荐
相关产品推荐

