Я некоторое время боролся с 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
?