2014-01-28 2 views
1

Кажется SQLite базы данных блокируются, когда я делаю операцию удаления, как показано ниже:Как разблокировать Sqlite базы данных после удаления

И мне нужно удалить два раза, чтобы обновить. Каков нормальный способ удаления без блокировки в базе данных Sqlite?

 
    var ThisTrans = await db.QueryAsync<TransactionLine>("Select * From TransactionLine Where Tid = '" + PassInTransId + "'"); 
    foreach (var line in ThisTrans) 
    { 
     var intDelStatus = db.DeleteAsync(line); 
    } 
    //- can I use this to close Connection?? but it does not work! 
    db = null; 


--- solution 

private async Task<bool> DelTransactionLine(int PassInTransId) 
{ 


//--1-- delete the selected transaction line 
var ThisTrans = await db.QueryAsync<TransactionLine>("Select * From TransactionLine Where Tid = '" + PassInTransId + "'"); 

    foreach (var line in ThisTrans) 
    { 
    var intDelStatus = await db.DeleteAsync(line); 
    } 

return true; 


} 







+0

Я не знаю, как работает SQLite, но у меня есть пара идей. Может ли быть так, что 'DeleteAsync' не выполняется, когда вы снова вызываете его? Есть ли синхронизация Удалить? Попробуйте с помощью 'Thread.Sleep' сразу после вызова' DeleteAsync', чтобы узнать, не так ли это – sebagomez

ответ

1

Можете ли вы сделать что-то вроде:

var ThisTrans = await db.QueryAsync<TransactionLine>("Select * From TransactionLine Where Tid = '" + PassInTransId + "'"); 
foreach (var line in ThisTrans) 
{ 
    var intDelStatus = await db.DeleteAsync(line); 
} 

Ждать операцию удаления возвращающегося, прежде чем попытаться удалить следующий?

+0

Мне нужно использовать Task для этой функции Delete. Вызов этой задачи базовая функция решит мою проблему. – MilkBottle

+0

Забудьте добавить: используйте функциональную базу в Task <> и ваше предложение о ожидающем ключевом слове. благодаря – MilkBottle

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