2014-11-22 75 views
1

Im在插入此sqlite數據庫時遇到了很多麻煩。第一個代碼的第一個是我第一次插入的項目,第二個代碼是我想要插入的項目。我第一次插入一切都很好,我可以檢索行很好,但第二次,我嘗試插入新的項目到數據庫它沒有更新,而是一個sqliteexception拋出消息約束。Sqlite3異步插入和更新

第1次

GroceriesItemHistory.AddToGroceriesHistory ("Banana"); 
GroceriesItemHistory.AddToGroceriesHistory ("Apple"); 
GroceriesItemHistory.AddToGroceriesHistory ("Citrus"); 

第二次

GroceriesItemHistory.AddToGroceriesHistory ("Banana"); 
GroceriesItemHistory.AddToGroceriesHistory ("Apple"); 
GroceriesItemHistory.AddToGroceriesHistory ("Citrus"); 
GroceriesItemHistory.AddToGroceriesHistory ("Plant"); 

這裏可以看到,調用數據庫來保存項目

saveHistory.Click += delegate 
{ 
    Task<string> result = localDB.SaveGroceriesItemHistory(); 
    Toast.MakeText(this, result.Result, ToastLength.Short).Show(); 
}; 

下面的代碼是實際的代碼插入商品

public async Task<string> SaveGroceriesItemHistory() 
{ 
    try 
    { 
     var dbConn = new SQLiteAsyncConnection(dbPath); 
     foreach (var historyItem in GroceriesItemHistory.GroceriesHistory) 
     { 
      HistoryItem item = new HistoryItem(); 

      item.HistoryItemName = historyItem.Key; 
      item.NumberOfAddidtions = historyItem.Value; 

      if(await dbConn.InsertAsync(item) != 0) 
       await dbConn.UpdateAsync(item); 
     } 
     return "GroceriesItemHistory saved!"; 
    } 
    catch (SQLiteException ex) 
    { 
     return ex.Message; 
    } 
} 

回答

1

好吧,我先quering分貝如果行與對象的相同主鍵的存在我想插入

if(await dbConn.FindAsync<HistoryItem>(x => x.HistoryItemName == item.HistoryItemName) != null) 
    await dbConn.UpdateAsync(item); 
else 
    await dbConn.InsertAsync(item); 
固定的問題