Tôi đang gặp sự cố khi đóng cơ sở dữ liệu của mình trước khi cố gắng xóa tệp. Mã chỉ là
myconnection.Close();
File.Delete(filename);
Và Delete ném ra một ngoại lệ rằng tệp vẫn đang được sử dụng. Tôi đã thử lại Delete () trong trình gỡ lỗi sau vài phút, vì vậy đây không phải là vấn đề về thời gian.
Tôi có mã giao dịch nhưng nó hoàn toàn không chạy trước lệnh gọi Close (). Vì vậy, tôi khá chắc chắn đó không phải là một giao dịch mở. Các lệnh sql giữa mở và đóng chỉ là các lựa chọn.
ProcMon hiển thị chương trình của tôi và phần mềm chống vi-rút của tôi đang xem xét tệp cơ sở dữ liệu. Nó không hiển thị chương trình của tôi giải phóng tệp db sau khi đóng ().
Visual Studio 2010, C #, System.Data.SQLite phiên bản 1.0.77.0, Win7
Tôi đã thấy một lỗi hai năm tuổi giống như thế này nhưng bảng thay đổi cho biết nó đã được sửa.
Có điều gì khác tôi có thể kiểm tra không? Có cách nào để lấy danh sách các lệnh hoặc giao dịch đang mở không?
Mới, mã hoạt động:
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);