Таблица SQLite не обновляется - PullRequest
0 голосов
/ 12 июня 2019

У меня проблема.Я создал SwitchButton и хочу сохранить состояние в таблице базы данных.Поэтому я создал этот код для отладки:

SettingSwitch.CheckedChange += (s, b) =>
{
    SettingDb testsetting = new SettingDb
    {
        Name = mItems[position].Name,
    };

    SettingDb test = MainActivity.db.SelectRowFromTableSettings(testsetting);

    if (test != null)
    {
        bool SwitchValueBool = Convert.ToBoolean(test.Value);
    }


    bool isChecked = ValueDictionary[position];
    if(isChecked == true)
    {
        isChecked = false;
    }
    else if(isChecked == false)
    {
        isChecked = true;
    }

    SettingDb setting = new SettingDb()
    {
        Name = SettingName.Text,
        Type = "Switch",
        Value = isChecked.ToString()
    };

    MainActivity.db.UpdateTableSettings(setting);
    ValueDictionary[position] = isChecked;

    SettingDb test2 = MainActivity.db.SelectRowFromTableSettings(testsetting);

    if (test2 != null)
    {
        bool SwitchValueBool = Convert.ToBoolean(test2.Value);
    }
};

Ожидаемый результат должен быть:

test.Value = False
test2.Value = Opposite of test.Value, so True

Но теперь значение, которое я получаю из таблицы, всегда ложно.Вот функция обновления:

string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
public bool UpdateTableSettings(SettingDb setting)
{
    try
    {

        using (var connection = new SQLiteConnection(System.IO.Path.Combine(folder, "Settings.db")))
        {
            connection.BeginTransaction();
            connection.Query<SettingDb>("UPDATE SettingDb SET Value=? WHERE Name=?", setting.Value, setting.Name);
            //connection.Update(setting);
            connection.Commit();
            return true;
        }
    }
    catch (SQLiteException ex)
    {
        Log.Info("SQLiteEx", ex.Message);
        return false;
    }
}
public SettingDb SelectRowFromTableSettings(SettingDb setting)
{
    try
    {
        using (var connection = new SQLiteConnection(System.IO.Path.Combine(folder, "Settings.db")))
        {
            return connection.Query<SettingDb>("SELECT * FROM SettingDb WHERE Name=?", setting.Name).FirstOrDefault();
        }
    }
    catch (SQLiteException ex)
    {
        Log.Info("SQLiteEx", ex.Message);
        return null;
    }
}

Значение таблицы не обновляется !!!Может кто-нибудь сказать мне, что я делаю не так?Пожалуйста, дайте мне знать!

1 Ответ

1 голос
/ 13 июня 2019

Согласно вашему описанию, вы хотите обновить таблицу базы данных sqlite, пожалуйста, посмотрите следующий код и измените функцию обновления.

 static void UpdateDatabase(int primaryKey, string newText, int newValue)
{
    string path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "mydatabase.db");
    var db = new SQLiteConnection(path, false);
    string sql = "UPDATE MyTable SET MyTextColumn = ?, MyValueColumn = ? WHERE MyPrimaryKey= ?";
    string[] parms = new String[] { newText, newValue.ToString(), primaryKey.ToString() };
    var cmd = db.CreateCommand(sql, parms);
    cmd.ExecuteNonQuery();
}
...