Файл блокировки SQLite, даже если соединение закрыто - PullRequest
5 голосов
/ 06 мая 2010

Разве следующий оператор не должен быть autocommited ? Я получаю IOException , пытающийся удалить файл после выполнения запроса.

using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "data\\test.db;Version=3;"))
{
    connection.Open();
    SQLiteCommand command = new SQLiteCommand("CREATE TABLE IF NOT EXISTS test (id INTEGER)", connection);
    command.ExecuteNonQuery();
}

//throwing an IOException
File.Delete(AppDomain.CurrentDomain.BaseDirectory + "data\\test.db");

Ответы [ 5 ]

6 голосов
/ 31 октября 2016

Я опоздал на вечеринку, но мне пришлось:

GC.WaitForPendingFinalizers();
GC.Collect();

До вызова File.Delete ().

1 голос
/ 22 июня 2012

Разве SQLiteCommand также Dispose (способный)? Соединение может не закрыться, потому что вы еще не закрыли команду. Я бы тоже использовал это.

0 голосов
/ 02 октября 2018

Вы должны утилизировать каждый SQLiteConnection , SQLiteCommand и SQLiteDataReader , как только вы закончите его использовать. Просто создайте SQLiteCommand в блоке «using», и проблема исчезнет.

0 голосов
/ 22 июня 2012

Вы пытались закрыть соединение после выполнения запроса?

connection.Close();

0 голосов
/ 06 мая 2010

Я не уверен, в чем проблема - я просто прочитал исходный код для C # клиента и C # реализации sqlite, и нет ничего очевидного - так что, возможно, вам просто нужно подождать несколько секунд чтобы операционная система закончила запись на диск до того, как все будет готово для удаления?

Конечно, если данных не так много, вам просто нужно использовать базу данных в памяти. Зачем беспокоить файловую систему данными, если вам это не нужно? Вам нужна эта строка подключения:

Data Source=file::memory:;Version=3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...