2012-06-28 24 views
5

He estado peleando con OleDbConnection por un tiempo tratando de que no cache. Básicamente estoy accediendo a una base de datos de acceso compartida, que se está escribiendo desde otra aplicación, y luego estoy leyendo valores (habiendo comprobado que se vacía a través de la última hora de escritura y un posterior retraso de 1 segundo).Disable/Flush OleDbConnection Cache

Lamentablemente, esto no es del todo confiable.

He estado leyendo (y volverse loco) cómo deshabilitar la agrupación de conexiones, y soy posteriormente, después de cada actualización posible, realizar lo siguiente antes de volver a conectar: ​​

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

Además de esto, la conexión cadena deshabilita la agrupación de conexiones con OLE DB Services = -2. Finalmente, también cambié PageTimeout a '10' en el registro para Jet 4.0.

Desafortunadamente, todas estas medidas no tienen ningún efecto. Ahora, lo único que puedo pensar es lo que se menciona en this Microsoft KB Article, y llame al JRO.JetEngine.RefreshCache. El único problema con eso es que su argumento es un ADODB.Connection. Prefiero no reescribir toda la capa de la base de datos y dónde mi software está leyendo los registros para usar un objeto COM heredado solo para tener esta funcionalidad, pero parece que puede ser la única forma.

Mi pregunta es, mientras que actualmente se somete a esta tarea de reescritura para usar ADODB (¡ni siquiera ADO.NET!), ¿Es posible desactivar el almacenamiento en caché de un OleDbConnection?

Respuesta