2015-10-12 1 views
0

Когда я обновляю некоторые данные, иногда он выдает исключение: Database is locked. Код ниже:Как решить SQLite «База данных заблокирована» в C#?

public int DisableSalesBySalesID(string SalesID) 
{ 
    int count = 0; 
    try 
    { 
     using (SQLiteConnection conn = new SQLiteConnection(ConnectionString)) 
     { 
      conn.Open(); 
      string sql = @"update SalesMaster set Disabled = '1' where [email protected]"; 
      using (SQLiteCommand cmd = new SQLiteCommand(sql, conn)) 
      { 
       cmd.Parameters.Add(new SQLiteParameter("@SalesID", SalesID)); 
       count = cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
    } 
    return count; 
} 

И это зависит от SalesID. Некоторые SalesID будут в порядке, но остальные сделают исключение. Зачем?

+5

Предположительно, у другого запроса есть блокировка для этого SalesID в момент запуска обновления. Эта ошибка специально означает, что это ваш собственный процесс, а не другой процесс, создающий блокировку. У вас еще есть SELECT, когда вы вызываете этот код? –

+0

http://stackoverflow.com/questions/17592671/sqlite-database-locked-exception?rq=1 –

+0

Вы можете применить весь мощный хакерский подход к вашему запросу, 'WITH (NOLOCK)' или '(nolock)'. Кроме того, что будет применяться почти ко всем вашим запросам SELECT. – Greg

ответ

0

общей причиной является то, что у вас есть оборванный sqlcommand. sqlcommands содержат блокировки в базе данных. то же самое для sqlreaders. Убедитесь, что все они используются в блоках.

Смежные вопросы