2012-06-28 4 views
5

Я сражался с OleDbConnection, а теперь пытаюсь заставить его не кэшировать. В основном я получаю доступ к базе данных общего доступа, которая записывается из другого приложения, а затем я считываю значения (проверяя, что он очищается через время последней записи и последующую 1-секундную задержку).Disable/Flush OleDbConnection Cache

К сожалению, это абсолютно ненадежно.

Я читал (и сходит с ума), как отключить пулы соединений, и я впоследствии, после каждого возможного обновления, выполнив следующие действия перед повторным включением:

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

В дополнение к этому, соединение строка отключает объединение пулов с OLE DB Services = -2. Наконец, я также изменил PageTimeout на «10» в реестре для Jet 4.0.

Все эти меры, к сожалению, не имеют никакого эффекта. Теперь единственное, что я могу придумать, это то, что упоминается в this Microsoft KB Article, и позвоните по телефону JRO.JetEngine.RefreshCache. Единственная проблема заключается в том, что это аргумент ADODB.Connection. Я бы предпочел не переписывать весь свой уровень базы данных и где записи читаются моим программным обеспечением, чтобы использовать устаревший COM-объект, чтобы иметь эту функциональность, но, похоже, это может быть единственным способом.

Мой вопрос заключается в том, что в настоящее время эта задача переписывается для использования ADODB (даже ADO.NET!), Можно ли отключить кеширование OleDbConnection?

ответ

Смежные вопросы