gpt4 book ai didi

c# - 禁用/刷新 OleDbConnection 缓存

转载 作者:太空狗 更新时间:2023-10-29 19:47:17 25 4
gpt4 key购买 nike

我一直在与 OleDbConnection 斗争一段时间,现在试图让它不缓存。基本上我正在访问一个共享的 Access 数据库,该数据库正在从另一个应用程序写入,然后我正在读回值(已检查它是否通过上次写入时间和随后的 1 秒延迟刷新)。

不幸的是,这完全不可靠。

我一直在阅读(并且变得疯狂)如何禁用连接池,随后,在每次可能的更新之后,在重新连接之前执行以下操作:

_connection.Close();
_connection.Dispose();
_connection = null;
OleDbConnection.ReleaseObjectPool();
GC.Collect();

除此之外,连接字符串通过 OLE DB Services = -2 禁用连接池。最后,我还在 Jet 4.0 的注册表中将 PageTimeout 更改为“10”。

不幸的是,所有这些措施都没有效果。现在我唯一能想到的就是this Microsoft KB Article中提到的,并调用 JRO.JetEngine.RefreshCache。唯一的问题是它的参数是一个 ADODB.Connection。我宁愿不重写我的整个数据库层以及我的软件正在读取记录的位置以使用遗留 COM 对象来获得此功能,但它似乎是唯一的方法。

我的问题是,虽然目前正在进行重写以使用 ADODB(甚至不是 ADO.NET!)的任务,但是否可以禁用 OleDbConnection 的缓存?

最佳答案

最后,我找到了解决方法:使用 OdbcConnection 而不是 OleDbConnection。

这是旧代码:

string mdbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + mdbFile + ";OLE DB Services=-2";
using (OleDbConnection conn = new OleDbConnection(mdbConnectionString)) {
conn.Open();
//Do your query
}

这是新的:

string mdbConnectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + mdbFile;
using (OdbcConnection conn = new OdbcConnection(mdbConnectionString)) {
conn.Open();
//Do your query
}

一切正常。

关于c# - 禁用/刷新 OleDbConnection 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com