【问题标题】:SQlite writes a 0 instead of my dataSQlite 写入 0 而不是我的数据
【发布时间】:2014-08-08 15:29:06
【问题描述】:

我在使用 Xamarin 更新 android 应用程序中的 sqlite 数据库中的记录时遇到问题。这是创建表:

 CREATE TABLE [tickets] (key ntext, json ntext, last_refreshed text)

这是 UPDATE 语句:

 UPDATE [tickets] SET [json]=@json AND [last_refreshed] = datetime('now') WHERE [key] = @key

这是我编写数据的代码。我已经确认“数据”和“键”变量中的数据是所需的数据,并且 TICKET_TABLE_UPDATE 常量是正在使用的数据,但是由于某种原因,当我从 sqlite 数据库中读取记录时,有一个“ 0”在json字段中,并且last_refreshed字段尚未更新。有什么想法吗?

    public void WriteTicket(JiraTicket ticket) {
        int count = 0;
        using (SqliteCommand com = con.CreateCommand()) {
            com.CommandText = TICKET_TABLE_COUNT;
            com.Parameters.AddWithValue("@key", ticket.Key);
            count = int.Parse(com.ExecuteScalar().ToString());
        }
        using (SqliteCommand com = con.CreateCommand()) {
            if (count > 0) {
                com.CommandText = TICKET_TABLE_UPDATE;
            } else {
                com.CommandText = TICKET_TABLE_INSERT;
            }

            String data = ticket.JSON;
            String key = ticket.Key;
            com.Parameters.AddWithValue("@key", key);
            com.Parameters.AddWithValue("@json", data);
            com.ExecuteNonQuery();
        }

【问题讨论】:

  • 如果有什么不同的话,写的字符串相当长,可能有几十万个字符。
  • 这是使用 mono.data.sqlite
  • sqlite 的最大文本长度是数百万,所以你应该没问题。也许它与您的数据类型有关。我认为不支持 ntext。
  • 如果不支持,那为什么要建表呢?并且初始插入有效,它只在更新语句上写入 0。
  • 不支持我的意思更像是文档中没有定义。我使用 SQLite 的经验表明,它在数据类型方面非常灵活。但是您使用的是 SQLite 没有明确说明如何处理的数据类型,因此结果可能无法预测。

标签: c# android sqlite xamarin xamarin.android


【解决方案1】:

用逗号替换更新语句中的“AND”以分隔字段更新

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多