Я пишу C# программу, которая обращается к БД SQLite.
На начальном этапе я читаю пользовательскую версию таблицы БД и, если она старше, я удаляю таблицу и регенерирую ее.
Проблема в том, что когда go удалить таблицу, я получаю много ошибок, таких как:
Ошибка SQLite (6): оператор прерывается в 21: [DROP TABLE IF EXISTS orders;] таблица базы данных заблокирована
Я обнаружил, что, вероятно, это потому, что активна предыдущая команда SELECT, тогда мне нужно сбросить / завершить ее - но как?
I пробовал с rdr.Close()
, а затем с cmd.Reset()
, но без положительных результатов.
Мой код:
Debug.WriteLine("[DbManager] check db version..");
cmd = new SQLiteCommand("select * from settings;", sqlConnection);
try {
rdr = cmd.ExecuteReader();
if (rdr.Read()){
// Read and check version
var i = rdr.GetOrdinal("version");
var version = rdr.GetInt32(i);
LogManager.Write(
String.Format(
"> Version: {0} - CurrentVersion: {1}", version, CURRENT_DB_VERSION
)
);
if (version < CURRENT_DB_VERSION){
// Cancella la tabella orders
cmd.Reset(); //
rdr.Close();
/*var cmdDrop*/ cmd = new SQLiteCommand("DROP TABLE IF EXISTS orders;", sqlConnection);
try {
/*cmdDrop*/cmd.ExecuteNonQuery();
...