lam*_*ora 6 vb.net ms-access oledbconnection
我必须使用另一个开发人员制作的项目.一个带有Visual-Basic代码的Win-Form项目,MS-Access为db和一些OleDbConnections.有一个错误:有时应用程序无法打开OleDbConnection,因为已在db上达到最大连接数.我知道使用连接的最佳方法是:
Using cn As New OleDbConnction(s)
...
cn.Close()
End Using
Run Code Online (Sandbox Code Playgroud)
但是在项目中有许多类可以使用db,在许多这些类中,OleDbConnections具有"Friend"可见性,可以在不同的时间打开和关闭.因此,将所有OleDbConnections放入Using构造中是不可能的,并且很难找到哪些操作"忘记"关闭其中一个OleDbConnection.
一个可能的解决方案可能是只使用一个唯一的公共OleDbConnection,并在打开之前检查它是否尚未打开.但有人告诉我这是一个非常糟糕的做法.我想他告诉我有关表演的事情,但我完全不知道.你能告诉我为什么一个独特的公共OleDbConnection被弃用了吗?对我来说,对于我的问题,你有一个"简单"的解决方案吗?谢谢你,Pileggi
从您的描述中,我看到了一些可能导致您的问题的可能问题:
一些可能的方法来调查和解决问题:
跟踪所有打开/关闭调用
添加一些每次打开和关闭连接时显示的调试跟踪.
它将允许您检测嵌套连接以及您的连接池被浪费的位置.
强制连接轮询 一个简单的"修复"可能是在连接字符串中明确设置连接池.它应该是默认行为,所以它可能无法解决您的问题,但它很简单,没有理由不尝试它:
OLE DB Services=-1
Run Code Online (Sandbox Code Playgroud)
使用连接管理器类为您创建/释放连接.
用您自己的代码替换新OleDbConnection的所有显式创建和关闭操作.这将允许您始终在整个应用程序中重复使用单个现有连接,并允许您通过将行为集中在一个位置来快速调整整个应用程序.
那么为什么持有单一连接通常会被弃用?
通常,您不应该在整个应用程序中保持连接打开,因为它们会强制数据库服务器为您保留可用资源,并且会减少可以连接的客户端数量(总是有可用的连接数量有限).
对于没有服务器兼职保持一个连接开放虽然-a基于文件的数据库访问是因为打开新的连接(创建锁定的文件)相关联的延迟的实际优选的.由于Access并不意味着与大量并发用户一起使用,因此保持连接打开的资源成本不足以成为问题.
从简单的测试中可以看出,保持连接始终打开可以使后续连接打开速度提高约10倍!
OleDb驱动程序为您执行连接池,因此它可以在释放连接时重新使用连接.
通过保持连接和数据库操作的小型化和包含,您在使用线程时不太可能遇到并发问题.如果使用相同的管道向数据库执行多个操作,则保持全局连接可能会成为问题.