ms-access - 立即关闭与 Jet/ADO 的连接真的明智吗?

标签 ms-access vb6 connection ado jet

我对这个主题进行了广泛的研究,并与我的同事进行了深入的讨论。

普遍的共识似乎是,数据库连接应该在需要时打开并立即关闭。任何缓存/连接池都应由数据库驱动程序或其他一些层完成,而不是由应用程序本身完成。

但我对 Jet/ADO 持怀疑态度。 Jet 和/或 ADO 使用读取缓存和惰性写入,这可能导致 "unsynchronized" connections .当然,我可以在每次使用 JRO 时重新同步连接,但这似乎很麻烦,而且可能会降低性能。

我应该遵循关闭每个连接并重新同步每个新连接的“最佳实践”,还是应该因为 Jet/ADO 怪癖而只使用全局连接对象?

最佳答案

Jet/ACE 的一个问题是创建锁定文件 (*.ldb) 可能会造成严重的性能损失。此外,如果 LDB 已经存在(因为另一个用户已连接),设置锁定可能会花费大量时间。

因此,您希望尽量减少应用的连接次数,因为您可能会浪费时间不断地重新创建和重新连接到 LDB 文件。

在 Access 应用程序中,许多程序员的常见做法是 maintain a persistent connection .

通常的建议是以隐藏形式打开表或在表上打开记录集。我更喜欢初始化一个指向后端的数据库变量。托尼在引用文章中的反对对我来说似乎微不足道——解析连接字符串并不难,例如 Mid(CurrentDB.TableDefs("MyLinkedTable").Connect, 11)。

在非 Access 上下文中,您会遇到同样的问题,因为这是 Jet/ACE 数据库引擎问题。当然,保持打开连接的具体方法会有所不同,但要点是保持打开连接意味着数据库引擎对锁定文件的争用更少。

关于ms-access - 立即关闭与 Jet/ADO 的连接真的明智吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1264734/

相关文章:

ms-access - 在 VBA 中使用 Alias 关键字声明函数

vb.net - Prolog 连接到 vb.net

Android、Microsoft Graph API - 网络无法访问

sql - 自动从Access中插入数据到Sql server

java - 任何人都可以帮助我将我的应用程序连接到 Access

ide - 如何在 VB6 中声明 MAX_DOUBLE?

Http 持久连接限制

ms-access - 从 2010 Data Macro 中运行 vba 代码

ms-access - MS Access 有没有办法获取当前的 Active Directory 用户?

vb6 - 如何在所有vb函数中放置错误处理程序