首页 文章

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

提问于
浏览
9

关于在.NET应用程序中管理数据库连接的最佳实践 - 我知道,通常,传递连接对象是不好的 .

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


1. I have two instances of business objects, of different classes, in a parent-child relationship (the child is private.) Which of the following is best?

  • 保持一个私有静态连接打开并共享,由两个对象使用,并保持打开状态,直到处理完父节点 .

  • 保持两个私有静态连接打开,每个对象一个,在处理对象之前不要关闭 .

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


2. My second question is essentially the same, but for a single form. What's best here?

  • 保持一个私有静态连接打开并共享表单的生命周期 .

  • 不要保持静态连接;打开并随后为需要它的表单中的每个方法关闭一个连接(同样,每个方法只有1-3个查询 . )

4 回答

  • 6

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

    using (DBConnection db = new DBConnection(connectString))
    {
        //do stuff
    }
    
  • 8

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

    这是一个有趣的摘录 .

    为获得最佳性能,请仅在需要时保持与数据库的连接 . 此外,减少打开和关闭多个操作的连接的次数 .

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

  • 11

    (是评论)......

    理论上,您不应该从业务逻辑中访问数据库 - 它应该位于单独的数据访问类中 . (例如,将来你需要将它们以XML格式离线存储,或者使用Oracle而不是SQL Server ......你不想重写你的业务逻辑!)

    您的业务对象不应具有与之关联的数据库连接 . 应该在一些DAL工厂类型方法中打开连接,检索/构建对象,然后关闭连接并返回对象 .

    业务对象本身应包含业务逻辑字段和方法,这些字段和方法可以回调数据访问层,数据访问层应为每个DAL方法创建新的数据库连接 .

    您可以通过使用连接池来缓解您的低效率恐惧,这意味着如果您打开和关闭连接数百次,则很可能它们都将使用相同的连接 . 但是你根本不应该保持数据库连接 - 尤其不是作为类的成员 .

    希望有所帮助!

  • 7

    在回答这两个问题时,如果您使用的是具有连接池的内容,例如ADO.NET,则应编写查询代码以尽可能缩短连接 . 即 open and subsequently close a new connection for every method that requires it. . 当您关闭连接时,它将返回到连接池并在后续查询中重用,因此您不会因打开和关闭一堆连接而导致性能下降 . 优点是,与长时间保持连接打开相比,您打开的同时连接数更少 . 应用程序是Windows窗体而不是Web窗体并不重要:保持连接尽可能短 .

相关问题