sqlite на языке Xamarin.От того, как обновить отдельную запись в локальной БД

#sqlite #xamarin.forms

Вопрос:

Я пытаюсь обновить отдельные записи в базе данных sqlite. Я знаю, как вставлять и удалять записи. Я хотел бы обновить отдельную запись аналогично тому, как я удаляю отдельную запись ниже. Для получения записи по идентификатору актива используется инструкция linq. Затем я хотел бы передать свои данные сюда для обновления.

Я также включил, как я вставляю новую запись для справки. У кого-нибудь есть пример, которым они могли бы поделиться?

Удалите существующую запись

 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:

Вам нужно основное Key или Id в объявлении объекта, чтобы идентифицировать ваш уникальный объект в базе данных, например:

 [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/образцы/xamarin/xamarin-формы-образцы/todo/

Комментарии:

1. Спасибо, что указали мне правильное направление @Jessie Zhang

2. Можете ли вы рассказать мне, как удалить таблицу, используя вышеуказанную структуру. Я могу сделать это так, но предпочел бы использовать вместо этого вышеприведенную методологию: using (SQLiteConnection conn = new SQLiteConnection(App.FilePath)) { conn.DropTable<AssetRegister>();}