Dosyayı silme girişiminden önce veritabanımı kapatırken sorun yaşıyorum. Kod sadece
myconnection.Close();
File.Delete(filename);
Ve Sil, dosyanın hala kullanımda olduğuna dair bir istisna atar. Birkaç dakika sonra hata ayıklayıcıdaki Delete () öğesini yeniden denedim, bu nedenle bu bir zamanlama sorunu değil.
İşlem kodum var ama Close () çağrısından önce hiç çalışmıyor. Bu yüzden açık bir işlem olmadığından oldukça eminim. Open ve close arasındaki sql komutları sadece seçimlerdir.
ProcMon, programımı ve antivirüsümü veritabanı dosyasına bakarken gösteriyor. Close () işleminden sonra db dosyasını serbest bırakan programımı göstermiyor.
Visual Studio 2010, C #, System.Data.SQLite sürüm 1.0.77.0, Win7
Bunun gibi iki yıllık bir böcek gördüm ama değişiklik günlüğü düzeltildiğini söylüyor.
Kontrol edebileceğim başka bir şey var mı? Açık komutların veya işlemlerin bir listesini almanın bir yolu var mı?
Yeni, çalışan kod:
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);