Отключить/очистить кэш OleDbConnection

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

8
задан Rudi Visser 28 June 2012 в 10:45
поделиться