Xamarin.Forms 中的 sqlite 如何更新本地数据库中的单个记录

Posted

技术标签:

【中文标题】Xamarin.Forms 中的 sqlite 如何更新本地数据库中的单个记录【英文标题】:sqlite in Xamarin.Froms how to Update individual record in Local DB 【发布时间】:2021-11-16 12:18:03 【问题描述】:

我正在尝试更新 sqlite 数据库中的单个记录。我知道如何插入和删除记录。我想以与下面删除单个记录类似的方式更新单个记录。这使用 linq 语句按资产 ID 获取记录。然后我想将我的数据传递给它以进行更新。

我还介绍了如何插入新记录以供参考。有没有人可以分享的例子?

删除现有记录

using (SQLiteConnection localconn = new SQLiteConnection(App.FilePath))
         
            localconn.CreateTable<Road_Inspections>();
            localconn.Table<Road_Inspections>().Where(x => x.Unique_ID == unique_ID).Delete();
         

插入新记录

        Road_Inspections lri = new Road_Inspections()
                
                    ID = id,
                    Road_ID = Road_ID.Text.ToString(),
                    Asset_ID = Asset_ID.Text.ToString(),
                    Defect_Type = txtDefectType.Text.ToString(),
                    Response = txtResponse.Text.ToString(),
                    Inspection_Date = DateTime.Now,
                    
                ;

                using (SQLiteConnection conn = new SQLiteConnection(App.FilePath))
                
                    conn.CreateTable<Road_Inspections>();
                    int rowsAdded = conn.Insert(lri);
                    await DisplayAlert("Success", "Inspeciton Saved to Device", "OK");
                

【问题讨论】:

【参考方案1】:

您需要在您的对象声明中使用主要的KeyId 来标识您数据库中的唯一对象,例如:

[PrimaryKey, AutoIncrement]
public int Id  get; set; 

由于您要更新,您必须首先从数据库中获取原始条目。 然后你可以编辑和更新它。因此,您无需在插入新的之前将其删除。

在 xamarin 形式中,您可以使用 nuget sqlite-net-pcl 来实现此目的。

请参考以下代码:

 public Task<int> SaveItemAsync(TodoItem item)
    
        if (item.ID != 0)
        
            return Database.UpdateAsync(item);
        
        else
        
            return Database.InsertAsync(item);
        
    

更多详情,您可以查看:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/data/databases。

上面的文档中有一个示例,您可以在这里查看:https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/todo/

【讨论】:

感谢您为我指明正确的方向@Jessie Zhang 你能告诉我如何使用上述框架删除表格。我可以这样做,但更愿意使用上述方法:using (SQLiteConnection conn = new SQLiteConnection(App.FilePath)) conn.DropTable&lt;AssetRegister&gt;();

以上是关于Xamarin.Forms 中的 sqlite 如何更新本地数据库中的单个记录的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Sqlite(有时)在更新后获取错误结果

我应该在 Xamarin.Forms 上使用哪些 SQLite (sqlite-net-pcl) 标志?

如何在Xamarin Forms中使用SqLite?

如何为 Xamarin.Forms 中的段控件设置圆角

无法在 UWP 中设置 SQLite 对象 - Xamarin Forms

如何从列表Xamarin Forms中获取所选项目?