2012-06-28 18 views
5

Ho combattuto con OleDbConnection per un po 'ora cercando di farlo non memorizzare nella cache. Fondamentalmente sto accedendo a un database di Access condiviso, che viene scritto da un'altra applicazione, e quindi sto leggendo i valori di ritorno (dopo aver controllato che sia svuotato tramite il tempo dell'ultima scrittura e un successivo ritardo di 1 secondo).Disable/Flush OleDbConnection Cache

Sfortunatamente, questo è del tutto inaffidabile.

ho letto (e impazzire) come disattivare il pool di connessioni, e sono in seguito, dopo ogni eventuale aggiornamento, eseguendo le seguenti operazioni prima di ricollegare:

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

In aggiunta a questo, il collegamento stringa disabilita il pool di connessioni con OLE DB Services = -2. Infine, ho anche modificato PageTimeout in "10" nel Registro di sistema per Jet 4.0.

Tutte queste misure purtroppo non hanno alcun effetto. Ora l'unica cosa che posso pensare di fare è ciò che è menzionato in this Microsoft KB Article e chiamare JRO.JetEngine.RefreshCache. L'unico problema è che il suo argomento è un ADODB.Connection. Preferisco non riscrivere il mio intero livello di database e dove i miei programmi leggono i record per utilizzare un oggetto legacy COM solo per avere questa funzionalità, ma sembra che potrebbe essere l'unico modo.

La mia domanda è, mentre al momento è in corso questa attività di riscrittura per utilizzare ADODB (nemmeno ADO.NET!), È possibile disabilitare la memorizzazione nella cache di un OleDbConnection?

risposta

Problemi correlati