Xamarin.Forms中操作SQLite:如何更新本地数据库单条记录
实现方案
你当前用的是sqlite-net ORM库,有两种和现有增删逻辑风格一致的更新实现方式:
方式1:条件链式更新(和你删除写法逻辑完全一致,无需提前查询记录)
直接通过Linq匹配目标记录,一次性更新指定字段,代码示例:
using (SQLiteConnection localconn = new SQLiteConnection(App.FilePath)) { localconn.CreateTable<Road_Inspections>(); // 按Unique_ID匹配目标记录,更新对应字段,这里的字段可根据实际需求增减 var targetRecord = localconn.Table<Road_Inspections>() .Where(x => x.Unique_ID == unique_ID) .FirstOrDefault(); int updateRows = 0; if (targetRecord != null) { targetRecord.Defect_Type = txtDefectType.Text.ToString(); targetRecord.Response = txtResponse.Text.ToString(); targetRecord.Inspection_Date = DateTime.Now; updateRows = localconn.Update(targetRecord); } if (updateRows > 0) { await DisplayAlert("成功", "记录已更新", "确定"); } else { await DisplayAlert("提示", "未找到匹配的记录", "确定"); } }
方式2:先查询再更新(适合需要提前校验记录状态的场景)
先把目标记录查出来,修改字段后再提交更新:
using (SQLiteConnection localconn = new SQLiteConnection(App.FilePath)) { localconn.CreateTable<Road_Inspections>(); // 匹配目标记录 var targetRecord = localconn.Table<Road_Inspections>().FirstOrDefault(x => x.Unique_ID == unique_ID); if (targetRecord != null) { // 赋值新的字段值,可按需增减 targetRecord.Defect_Type = txtDefectType.Text.ToString(); targetRecord.Response = txtResponse.Text.ToString(); targetRecord.Inspection_Date = DateTime.Now; targetRecord.Road_ID = Road_ID.Text.ToString(); targetRecord.Asset_ID = Asset_ID.Text.ToString(); // 提交更新 int updateRows = localconn.Update(targetRecord); if (updateRows > 0) { await DisplayAlert("成功", "巡检记录已更新", "确定"); } } else { await DisplayAlert("提示", "未找到对应记录,更新失败", "确定"); } }
注意事项
- 两种方式返回的
updateRows都是本次操作实际更新的记录行数,可用来判断操作是否生效 - 如果你的
Road_Inspections类里Unique_ID标记了[PrimaryKey]特性,也可以直接构造带主键的新对象调用Update方法,ORM会自动按主键匹配更新全字段
内容的提问来源于stack exchange,提问作者Tricky035
相关产品推荐
相关产品推荐

