Я некоторое время боролся с OleDbConnection
, пытаясь заставить его не кэшировать. По сути, я обращаюсь к общей базе данных Access, в которую записывается из другого приложения, а затем я считываю значения (проверив, что она сбрасывается через время последней записи и последующую задержку в 1 секунду).
К сожалению, это совершенно ненадежно.
Я читал (и сходил с ума), как отключить пул соединений, и впоследствии, после каждого возможного обновления, перед повторным подключением выполняю следующее:
_connection.Close();
_connection.Dispose();
_connection = null;
OleDbConnection.ReleaseObjectPool();
GC.Collect();
В дополнение к этому строка подключения отключает пул соединений с OLE DB Services = -2
. Наконец, я также изменил PageTimeout
на «10» в реестре для Jet 4.0.
Все эти меры, к сожалению, не дают никакого эффекта. Теперь единственное, что я могу придумать, это то, что упомянуто в этой статье Microsoft KB, и вызвать JRO.JetEngine.RefreshCache
. Единственная проблема в том, что это аргумент ADODB.Connection
. Я бы предпочел не переписывать весь уровень моей базы данных и места, где записи считываются моим программным обеспечением, чтобы использовать устаревший COM-объект только для того, чтобы иметь эту функциональность, но, похоже, это может быть единственным способом.
Мой вопрос: в настоящее время выполняется эта задача по переписыванию для использования ADODB (даже не ADO.NET!), Можно ли отключить кэширование OleDbConnection
?