对 DAO ODBC 与 Jet 的连接的高速缓存

连接管理的关键内容之一,就是 Jet 根据服务器的不同对一个或两个连接进行高速缓存。对于如 Oracle 类的服务器,由于它允许在连接上挂起结果,Jet 只需对一个连接进行高速缓存。对于如 Microsoft SQL Server,由于它不允许在连接上挂起结果,Jet 就必须对两个连接进行高速缓存。

注意   由 ODBCDirect 和 RDO 完成的 SQL Server 的服务器游标,就能够在单个连接上支持多种操作。但是不支持由 Jet 完成的服务器游标。

当 Jet 需要打开一个连接时,它总是首先检查其内部的连接高速缓存。如果那里存在一个使用相同 DSN 和数据库参数的连接,并且连接上也没有挂起的未完成查询,Jet 就重新使用它。为了同时进行读/写操作,支持在单个连接上挂起结果的后端数据库系统,并不需要另外一条连接。

注意   Jet 对用户 ID 和密码连同连接一起要进行高速缓存,所以它并不反复进行提示。这意味着如果应用程序需要以不同的用户 ID 和密码在服务器上登录,那么就只有强行关闭某些已经存在的连接操作才可能完成。

Jet 基于延续的时间和其动作对每一个连接计时。经过一段可配置的连接超时周期(其缺省值为 10 分钟),Jet 会自动关闭和放下那些处于休眠状态的连接。一个被认为处于休眠状态的连接,必须没有打开与之相关连的 Database 或 Workspace 对象。Jet 不会关闭那些仍有未提交的作业或有未读取结果的查询的连接。由于 Jet 会自动关闭连接,这表明需要时 Jet 也可以自动打开连接。

注意   连接超时的设置可以通过访问 Windows 的系统注册表进行调整。

如果应用程序需要访问一个 Jet 已经超时而被关闭的连接,则这个连接会自动被打开。连接的重新建立不会对应用程序带来任何问题。

在某些情况下,如果共享的 DSN 是相同的,则在 Jet 等待该 DSN 变为可用时,相对第二个 Database 对象的查询可能被封锁。