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
?