代码之家  ›  专栏  ›  技术社区  ›  Rob

在.NET中管理数据库连接的最佳实践是什么?

  •  9
  • Rob  · 技术社区  · 14 年前

    关于在.NET应用程序中管理数据库连接的最佳实践——我知道,一般来说,传递连接对象是不好的。

    但是,我有一些特别的好奇:


    1。我有两个生意实例 对象,不同类,在 亲子关系 是私有的。)以下哪一项 最好吗?

    • 保持一个私有静态连接处于打开和共享状态,由两个对象使用,并保持打开状态,直到释放父级。

    • 保持两个私有静态连接打开,每个对象一个,而不是 关闭,直到释放对象。

    • 不要保持静态连接;打开然后关闭新的 每个需要它的方法的连接。但是,我的大多数方法只运行1-3个查询,所以这看起来效率很低…?


    2。我的第二个问题本质上是相同的,但形式单一。这里最好的是什么?

    • 在表单的生命周期内,保持一个私有静态连接处于打开状态并共享。

    • 不要保持静态连接;以需要连接的形式打开并随后关闭每个方法的连接(同样,每个方法只需要1-3个查询)。

    4 回复  |  直到 14 年前
        1
  •  11
  •   Kieren Johnstone    14 年前

    (是评论)

    理论上,您不应该从业务逻辑访问数据库——它应该在一个单独的数据访问类中。(例如,将来需要以XML脱机存储它们,或者使用Oracle而不是SQL Server…您不想重新编写业务逻辑!)

    业务对象不应具有与其关联的数据库连接。连接应该以某种DAL工厂类型的方法打开,检索/构建对象,然后关闭连接并返回对象。

    业务对象本身应该包含业务逻辑字段和方法,这些字段和方法可能会回调到数据访问层,后者应该为每个DAL方法创建一个新的数据库连接。

    你的低效恐惧可以通过使用连接池来消除,这意味着如果你打开和关闭一个连接数百次,它们都有可能使用同一个连接。但是您不应该让数据库连接一直挂在周围,尤其是作为类的成员。

    希望有帮助!

        2
  •  8
  •   charachu    14 年前

    我的理解是,只要需要,联系就应该保持开放。大多数时候我在使用语句时都看到了连接,类似于

    using (DBConnection db = new DBConnection(connectString))
    {
        //do stuff
    }
    
        3
  •  7
  •   John M Gant aman_novice    14 年前

    此链接可能有帮助: Best Practices for Using ADO.NET

    这是一个有趣的摘录。

    为了获得最佳性能,请保持连接 只有当 必修的。同时,减少 打开和关闭连接的次数 对于多个操作。

    我一直遵循在using块中打开连接的实践,因此总是调用Dispose方法(因此也调用Close方法),而不必担心它。使用这种方法,我从来没有遇到过这样一种情况,即性能不佳与过多的并发连接或过多的设置或关闭操作有关。

        4
  •  6
  •   Thomas    14 年前

    在回答这两个问题时,如果您使用的是具有连接池的内容,如ado.net,则应将查询编码为使连接保持打开状态 尽可能短 . 即。 open and subsequently close a new connection for every method that requires it. . 当您关闭连接时,它将返回到连接池,并在随后的查询中重用,因此打开和关闭一组连接不会导致性能损失。这样做的好处是,您不会冒泄漏忘记关闭的连接的风险,从长远来看,与长时间保持连接打开相比,您打开的同时连接更少。应用程序是否是Windows窗体而不是Web窗体并不重要:请尽可能短地保持连接打开。