加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 为什么不推荐使用一个公共OleDbConnection?替代解决

发布时间:2020-12-17 00:30:48 所属栏目:大数据 来源:网络整理
导读:我必须使用另一个开发人员制作的项目.一个带有Visual-Basic代码的Win-Form项目,MS-Access为db和一些OleDbConnections.有一个错误:有时应用程序无法打开OleDbConnection,因为已在db上达到最大连接数.我知道使用连接的最佳方法是: Using cn As New OleDbConn
我必须使用另一个开发人员制作的项目.一个带有Visual-Basic代码的Win-Form项目,MS-Access为db和一些OleDbConnections.有一个错误:有时应用程序无法打开OleDbConnection,因为已在db上达到最大连接数.我知道使用连接的最佳方法是:
Using cn As New OleDbConnction(s)
  ...
  cn.Close()
End Using

但是在项目中有许多类可以使用db,在许多这些类中,OleDbConnections具有“Friend”可见性,可以在不同的时间打开和关闭.因此,将所有OleDbConnections放入Using构造中是不可能的,并且很难找到哪些操作“忘记??”关闭其中一个OleDbConnection.

一个可能的解决方案可能是只使用一个唯一的公共OleDbConnection,并在打开之前检查它是否尚未打开.
但有人告诉我这是一个非常糟糕的做法.我想他告诉我有关表演的事情,但我完全不知道.
你能告诉我为什么一个独特的公共OleDbConnection被弃用了吗?
对我来说,对于我的问题,你有一个“简单”的解决方案吗?
谢谢,
Pileggi

从您的描述中,我看到了一些可能导致您的问题的可能问题:

>嵌套连接:
您在彼此之间打开多个连接
>打开/释放连接太快:
正如David-W-Fenton所提到的那样,每次打开/关闭单个连接时,都会创建/删除锁定文件.此操作非常慢,如果您在应用程序中快速打开/关闭数据库(执行大量原子查询),您可能会遇到此问题.

一些可能的方法来调查和解决问题:

跟踪所有打开/关闭呼叫
添加一些每次打开和关闭连接时显示的调试跟踪.
它将允许您检测嵌套连接以及您的连接池被浪费的位置.

强制连接轮询
一个简单的“修复”可能是在连接字符串中明确设置连接池.它应该是默认行为,所以它可能无法解决您的问题,但它很简单,没有理由不尝试它:

OLE DB Services=-1

使用连接管理器类为您创建/释放连接.
用您自己的代码替换新OleDbConnection的所有显式创建和关闭操作.
这将允许您始终在整个应用程序中重复使用单个现有连接,并允许您通过将行为集中在一个位置来快速调整整个应用程序.

那么为什么持有单一连接通常会被弃用?

>通常,您不应该在整个应用程序中保持连接打开,因为它们会强制数据库服务器为您保留可用资源,并且会减少可以连接的客户端数量(总是有可用的连接数量有限).
对于Access而言-a基于文件的数据库没有服务器部分保持单个连接打开实际上是优选的,因为与打开新连接(创建锁定文件)相关的延迟.由于Access并不意味着与大量并发用户一起使用,因此保持连接打开的资源成本不足以成为问题.
From simple tests,可以证明保持连接始终打开允许后续连接打开大约快10倍!> OleDb驱动程序为您执行连接池,因此可以在释放连接时重新使用连接.>通过保持连接和数据库操作的小型化和包含,您在使用线程时不太可能遇到并发问题.如果使用相同的管道向数据库执行多个操作,则保持全局连接可能会成为问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读