ошибка блокировки базы данных sqlite

#c# #multithreading #sqlite

#c# #многопоточность #sqlite

Вопрос:

Я разрабатываю приложение на c # с внутренней базой данных sqlite. В моем приложении используются многопоточные концепции. Все потоки будут вызывать приведенный ниже код. затем он выдаст ошибку, поскольку база данных заблокирована.

 lock (localLockHandle)
        {

            SQLiteCommand cmd = conn.CreateCommand();
            cmd.CommandText = sqlExpr;
            int ireturn = cmd.ExecuteNonQuery();
            return ireturn;
        }
  

Есть ли какой-либо способ избавиться от этой ошибки блокировки базы данных. я открываю и закрываю соединение после каждого процесса. даже иногда он выдает эту ошибку блокировки. пожалуйста, дайте мне решение, поскольку это очень важно для меня.

Спасибо

Комментарии:

1. Я считаю, что применение блокировки в этот момент действительно ничего не даст. На мой взгляд, в какой-то момент вы выполняете запрос, который блокирует базу данных. Это сам запрос, а не команда SQLLiteCommand. Попытайтесь выяснить, какой запрос вы выполняли последним перед блокировкой базы данных.

Ответ №1:

Если я правильно понимаю ваш фрагмент кода, вы используете lock для объекта в локальной области видимости. Это означало бы, что другие потоки будут lock работать с другим объектом.

Попробуйте определить глобальную блокировку, например:

static readonly object DatabaseLock = new object()

а затем используйте lock(DatabaseLock) везде, где вы обращаетесь к базе данных.