Tengo problemas para cerrar mi base de datos antes de intentar eliminar el archivo. El código es solo
myconnection.Close();
File.Delete(filename);
Y Delete lanza una excepción de que el archivo todavía está en uso. He vuelto a probar Delete () en el depurador después de unos minutos, por lo que no es un problema de tiempo.
Tengo un código de transacción, pero no se ejecuta en absoluto antes de la llamada Close (). Así que estoy bastante seguro de que no es una transacción abierta. Los comandos sql entre abrir y cerrar son solo selecciones.
ProcMon muestra mi programa y mi antivirus mirando el archivo de la base de datos. No muestra que mi programa libere el archivo db después de close ().
Visual Studio 2010, C #, System.Data.SQLite versión 1.0.77.0, Win7
Vi un error de dos años como este, pero el registro de cambios dice que está arreglado.
¿Hay algo más que pueda comprobar? ¿Hay alguna forma de obtener una lista de los comandos o transacciones abiertos?
Nuevo código de trabajo:
db.Close();
GC.Collect(); // yes, really release the db
bool worked = false;
int tries = 1;
while ((tries < 4) && (!worked))
{
try
{
Thread.Sleep(tries * 100);
File.Delete(filename);
worked = true;
}
catch (IOException e) // delete only throws this on locking
{
tries++;
}
}
if (!worked)
throw new IOException("Unable to close file" + filename);