При попытке удалить БД (в тот момент, когда я могу гарантировать, что программа не запрос к БД, поэтому активных соединений нет) Я столкнулся с ошибкой:
Код: Выделить всё
IOException: The process cannot gain access to because is being used by another process.
После всего этого я определил, что файл БД закрывается неправильно всякий раз, когда я создаю соединение с БД. Ниже следует объяснение:
У меня есть следующая функция для выполнения запроса и загрузки результатов в DataTable:
Код: Выделить всё
public DataTable PerformQuery(string query) {
try {
DataTable table = new DataTable();
using(SQLiteConnection connection = new SQLiteConnection(connString)) {
SQLiteCommand cmd = connection.CreateCommand();
cmd.CommandText = query;
connection.Open();
if (!query.StartsWith("SELECT")) {
cmd.ExecuteNonQuery();
} else {
SQLiteDataReader reader = cmd.ExecuteReader();
FillTable(reader, table);
}
// Despite using the using scope, close and dispose the connection manually
connection.Close();
connection.Dispose();
}
// Kill all pools and call GC
SQLiteConnection.ClearAllPools();
GC.Collect();
GC.WaitForPendingFinalizers();
return table;
} catch (Exception ex) {
// Handle error... (not relevant)
return null;
}
}
- Вызов Close
- Вызов Dispose
- Выход из области использования
- Уничтожение всех пулов
- Выполнение GC и ждём завершения
Как я могу решить эту проблему?
РЕДАКТИРОВАТЬ 1:
- Использование .NET Приложение Winforms с System.Data.SQLite
- Уже пробовал добавить Pooling=false в строку подключения.
Подробнее здесь: https://stackoverflow.com/questions/751 ... ed-c-sharp
Мобильная версия