Estou tendo problemas para fechar meu banco de dados antes de tentar excluir o arquivo. O código é apenas
myconnection.Close();
File.Delete(filename);
E o Delete lança uma exceção de que o arquivo ainda está em uso. Tentei novamente Delete () no depurador após alguns minutos, portanto, não é um problema de tempo.
Eu tenho o código de transação, mas ele não é executado antes da chamada Close (). Portanto, tenho quase certeza de que não é uma transação aberta. Os comandos sql entre abrir e fechar são apenas seleções.
ProcMon mostra meu programa e meu antivírus olhando o arquivo de banco de dados. Ele não mostra meu programa liberando o arquivo db após o close ().
Visual Studio 2010, C #, System.Data.SQLite versão 1.0.77.0, Win7
Eu vi um bug de dois anos assim, mas o changelog diz que foi consertado.
Há mais alguma coisa que eu possa verificar? Existe uma maneira de obter uma lista de quaisquer comandos ou transações abertas?
Novo código funcional:
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);
SQLiteAsyncConnection.ResetPool()
, consulte este problema para obter detalhes.