Je rencontre un problème pour fermer ma base de données avant de tenter de supprimer le fichier. Le code est juste
myconnection.Close();
File.Delete(filename);
Et la suppression lève une exception selon laquelle le fichier est toujours en cours d'utilisation. J'ai réessayé le Delete () dans le débogueur après quelques minutes, donc ce n'est pas un problème de synchronisation.
J'ai un code de transaction mais il ne fonctionne pas du tout avant l'appel Close (). Je suis donc à peu près sûr que ce n'est pas une transaction ouverte. Les commandes sql entre ouvrir et fermer ne sont que des sélections.
ProcMon montre mon programme et mon antivirus en regardant le fichier de base de données. Il ne montre pas mon programme libérant le fichier db après la fermeture ().
Visual Studio 2010, C #, System.Data.SQLite version 1.0.77.0, Win7
J'ai vu un bogue vieux de deux ans comme celui-ci, mais le journal des modifications dit qu'il est corrigé.
Y a-t-il autre chose que je puisse vérifier? Existe-t-il un moyen d'obtenir une liste de toutes les commandes ou transactions ouvertes?
Nouveau code fonctionnel:
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);