У меня проблема с моим кодом. Я хочу удалить несколько строк в моей базе данных SQLite, но я получаю исключение «База данных заблокировано». Я прочитал несколько сообщений об этом, например this post, но моя проблема все еще здесь.«База данных заблокирована» с SQLite и C#
Вот мой код:
using (var c = new SQLiteConnection(_connectionSQLite))
{
c.Open();
if (c.State == ConnectionState.Open)
{
var reqExist = string.Concat("SELECT id FROM ... ");
using (var cmdExist = new SQLiteCommand(reqExist, c))
{
var reqUpdate = string.Concat("UPDATE ... WHERE id = ", cmdExist.ExecuteScalar());
using (var cmdUpdate = new SQLiteCommand(reqUpdate, c))
{
cmdUpdate.ExecuteNonQuery();
}
}
}
c.Close();
}
я получаю «база данных заблокирована» исключение на линии cmdUpdate.ExecuteNonQuery();
. Я попробовал заменить DELETE FROM
, тот же результат, но с SELECT
, он работает, я действительно не понимаю, что не так с моим кодом.
Спасибо за любую помощь.
@AbhilashRVankayala - Это ужасный совет. Нет ничего плохого в вложенных операциях using, и такие утверждения (или equiv try-finallys) необходимы для обеспечения правильного удаления ресурсов, что является одной из причин их проблемы. – antiduh
Вы открываете несколько соединений с одной и той же базой данных одновременно? –
Неприятные вещи произойдут, если ExecuteScalar не найдет никакого идентификатора. Кажется умной идеей конкат возвратить ExecuteScalar, но .... – Steve