繁体   English   中英

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

[英]What are best practices on managing database connections in .NET?

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

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


1.我有两个业务对象的实例,不同的类,父母 - 孩子关系(孩子是私人的。)以下哪项是最好的?

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

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

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


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

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

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

(是评论)......

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

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

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

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

希望有所帮助!

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

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

此链接可能会有所帮助: 使用ADO.NET的最佳实践

这是一个有趣的摘录。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM