【问题标题】:SQLlite Update query always return 0 in android projectSQLite 更新查询在 android 项目中总是返回 0
【发布时间】:2016-06-04 17:04:31
【问题描述】:

我正在尝试在单击按钮时更新数据库。但它总是返回0,并且数据库没有更新。

string query4 = "update Praysettings set value ='" + LocName + "' where id =52;";

db2.ExecuteQuery(query4);

public void ExecuteQuery(string query) 
{
    string dbPath = Path.Combine (
        System.Environment.GetFolderPath (
            System.Environment.SpecialFolder.Personal
        ),
        "tzmpo_t.rar"
    );

    if (File.Exists(dbPath)) {
        using (var db = new SQLiteConnection(dbPath))
        {
            int a = db.Execute(query);
            db.Close();
        } 
    }
}

【问题讨论】:

  • 您应该考虑您发布的内容是否真的有助于找到您的问题。也许你有一些Logcat的信息。如果没有,您的数据库有一个您可以共享的方案。无论如何id =52 看起来不对。通常这个id字段被称为_id
  • 和参数Locname长度有关,当我减少长度时,它更新成功,我的字段类型是VARCHAR,varchar的最大限制是多少。
  • SQLite does not impose any length restrictions 你能添加你的SQL方案吗?
  • 应该有 _id 否则内置的东西都不起作用。

标签: c# android sqlite xamarin


【解决方案1】:

值已经存在?如果您不更新该值,则不会有受影响的行。检查是否是这种情况。

这是我使用的代码,可能对你有帮助:

    private void OpenConnection()
    {
        lock (syncLock)
        {
            if (_connection == null || _connection.State == ConnectionState.Closed || _connection.State == ConnectionState.Broken)
            {
                _connection = new SqliteConnection("Data Source=" + DbPath);
                _connection.SetPassword(DbKey);
                _connection.Open();
            }
        }
    }

    private int ExecuteNonQuery(string query)
    {
        lock (syncLock)
        {
            OpenConnection();
            int rowcount = 0;
            using (var command = _connection.CreateCommand())
            {
                command.CommandText = query;
                try
                {
                    rowcount = command.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    Logger.Error("ExecuteNonQuery", e.Message + ". Query:" + query);
                }
                command.Dispose();
            }

            return rowcount;
        }
    }

【讨论】:

  • 和参数Locname长度有关,当我减少长度时,它更新成功,我的字段类型是VARCHAR,varchar的最大限制是多少。
  • 好的,因此您没有更新数据,因为您遇到了 SQL 错误。我不认为您使用的是 VARCHAR,也许您使用的是 TEXT,对吧?如果没有,请尝试使用 TEXT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 2014-03-20
  • 2022-12-18
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多