У меня возникла проблема с закрытием моей базы данных перед попыткой удалить файл. Код просто
myconnection.Close();
File.Delete(filename);
И Delete выдает исключение, которое файл все еще используется. Я повторил попытку удаления() в отладчике через несколько минут, так что это не проблема времени.
У меня есть код транзакции, но он не запускается вообще до вызова Close(). Поэтому я уверен, что это не открытая транзакция. Команды sql между open и close просто выбираются.
ProcMon показывает мою программу и мой антивирус, смотрящий на файл базы данных. Он не показывает мою программу, освобождающую файл db после закрытия().
Visual Studio 2010, С#, System.Data.SQLite версии 1.0.77.0, Win7
Я видел двухлетнюю ошибку, подобную этой, но журнал изменений исправил ее.
Есть ли что-нибудь еще, что я могу проверить? Есть ли способ получить список открытых команд или транзакций?
Новый рабочий код:
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);