为什么不建议使用一个公共OleDbConnection?解决该错误的另一种方法:打开太多的连接
|
我必须与另一个开发人员制作的项目一起工作。一个带有Visual Basic代码的项目Win-Form,带有MS-Access作为db和一些OleDbConnections。有一个错误:有时应用程序无法打开OleDbConnection,因为数据库上已达到最大连接数。我知道使用连接的最佳方法是:
Using cn As New OleDbConnction(s)
...
cn.Close()
End Using
但是,在项目中,有许多类可以与db一起使用,并且在这些类中,有许多具有“ Friend”可见性的OleDbConnections,它们在不同的时间打开和关闭。因此,不可能将所有OleDbConnections放置在Using构造中,并且很难找到什么操作“忘记”来关闭其中一个OleDbConnection。
一种可能的解决方案是仅使用一个唯一的公共OleDbConnection,并在打开之前检查是否尚未打开。
但是有人告诉我这是一个非常糟糕的做法。我想他告诉过我有关演出的信息,但我不知道。
您能告诉我为什么如此弃用一个唯一的公共OleDbConnection吗?
对我来说,您有没有针对我的问题的“简单”解决方案?
谢谢,
皮莱吉
没有找到相关结果
已邀请:
2 个回复
稀瓣囊
使用连接管理器类为您创建/释放连接。 用您自己的代码替换所有新的OleDbConnection的显式创建并关闭操作。 这样一来,您可以始终在整个应用程序中重复使用单个现有连接,并可以通过将行为集中在一个位置来快速调整整个应用程序。 那么,为什么不赞成使用单个连接呢? 通常,您不应该在整个应用程序中保持连接打开状态,因为它们会迫使数据库服务器为您保留可用资源,并且这会减少可连接的客户端数量(始终有有限数量的可用连接)。 对于Access,虽然-一个没有服务器部分的基于文件的数据库-保持单个连接打开实际上是可取的,因为与打开新连接(创建锁定文件)相关的延迟。由于Access并不打算与大量并发用户一起使用,因此保持连接打开的资源成本不足以成为问题。 从简单的测试可以看出,保持连接始终处于打开状态可以使后续连接的打开速度提高约10倍! OleDb驱动程序为您执行连接池,因此释放连接后便可以重新使用连接。 通过使连接和数据库操作保持在较小的范围内,使用线程时,您不太可能遇到并发问题。如果您使用到数据库的同一管道执行多个操作,则保持全局连接可能会成为问题。
娠频摩
。 这极大地加快了我的应用程序(主要是WinForms)的速度。 请注意,这也适用于Sqlite,它似乎也不支持连接池。