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

疑问:在其他类创建数据库连接后,using块是否会自动关闭连接?

问题

已知在using块内直接实例化SqlConnection时,无需调用Close()方法,连接会自动关闭。但在项目中,我们通过DBConnectionBackboneService类的GetDBConnection方法创建OracleConnection,再在主类的using块中使用该连接,想确认此场景下连接是否仍会自动关闭,还是需要手动调用Close()?

示例代码

using (SqlConnection conn = new SqlConnection(sConn))
{
    cmd.Connection = conn;
    // 执行数据库操作
    //conn.Close(); // 无需调用
}

项目代码

public class DBConnectionBackboneService : IDBConnectionBackboneService
{
    public OracleConnection GetDBConnection()
    {
        string conString = "<<Connection-String>>";
        return new OracleConnection(conString);
    }
}

class main()
{
    using (dbConnection = _dbConnectionRepo.GetDBConnection())
    {
        dbConnection.Open();

        // 调用数据库存储过程

        // 处理数据集
    }
}
回答

不需要手动调用Close()方法,连接会自动关闭。

原因很明确:using块的核心作用就是在代码块执行完毕后,自动调用对象的Dispose()方法。而OracleConnection实现了IDisposable接口,它的Dispose()方法会自动完成连接的关闭和资源释放——这和直接在using块里实例化SqlConnection的逻辑完全一致,不管连接对象是直接创建的还是通过其他方法返回的,只要被using块包裹,就会触发这个自动清理流程。

就算你手动调用了Close(),using块依然会执行Dispose(),不过这属于重复操作,不会有问题,但完全没必要多此一举。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:27:01