I have a android app created with xamarin
.
This is the code that crashes, not the first time, but often on the second time!
public void InsertOrUpdateInventoryWithoutEntries(Inventory inventory)
{
_logger.Debug("Enter");
try
{
var db = _dataBaseConnection.GetSqLiteConnection();
using (db)
{
var existingDbInventory = db.Find<DbInventory>(dbInventory => dbInventory.Code ==
inventory.Code);
if (existingDbInventory != null)
{
if (!existingDbInventory.Finished ) // do not update if finished.
{
existingDbInventory.Description = inventory.Description;
existingDbInventory.OpenTime = inventory.OpenTime;
existingDbInventory.Finished = inventory.Finished ;
existingDbInventory.UseInventoryList = inventory.UseInventoryList;
existingDbInventory.PostedToServer = inventory.PostedToServer;
existingDbInventory.InventoryListIsDownloaded =
inventory.InventoryListIsDownloaded;
UpdateInventory(existingDbInventory,db);
}
}
else
{
db.Insert(DbInventory.FromInventory(inventory));
}
db.Close();
}
}
catch
(SQLiteException ex)
{
_logger.Error(ex);
throw;
}
}
private void UpdateInventory(DbInventory inventory, SQLiteConnection db)
{
_logger.Debug("Enter");
try
{
var result = db.Update(inventory);
}
catch (SQLiteException ex)
{
_logger.Error(ex);
throw;
}
}
public bool InsertOrUpdateInventoryEntry(InventoryEntry inventoryEntryModel,
SQLiteConnection db=null)
{
_logger.Debug("Enter");
bool disposeFlg = false;
//detta då sqllite inte klarar av samtidiga anrop så bra, så man skall bara använda en
connection i taget !
if (db == null)
{
db = _dataBaseConnection.GetSqLiteConnection();
disposeFlg = true;
}
var existingDbInvetoryRow = db.Find<DbInventoryEntry>(dbInventoryRow =>
dbInventoryRow.ItemId == inventoryEntryModel.ItemId && dbInventoryRow.InventoryCode ==
inventoryEntryModel.InventoryCode);
if (existingDbInvetoryRow != null)
{
existingDbInvetoryRow.Cost = inventoryEntryModel.Cost;
existingDbInvetoryRow.Quantity = inventoryEntryModel.Quantity;
db.Update(existingDbInvetoryRow);
}
else
{
db.Insert(DbInventoryEntry.FromInventoryEntry(inventoryEntryModel));
}
if (disposeFlg)
{
db.Close();
db.Dispose();
}
return true;
}
private bool InsertInventoryRows(IEnumerable<InventoryEntry> inventoryEntryModels)
{
_logger.Debug("Enter");
var dbRows = inventoryEntryModels.Select(entry =>
(DbInventoryEntry.FromInventoryEntry(entry)));
var db = _dataBaseConnection.GetSqLiteConnection();
using (db)
{
db.InsertAll(dbRows);
db.Close();
}
return true;
}
The error I get is:
SQLite.SQLiteException: 'database is locked' or SQLite.SQLiteException: 'database is busy'