为啥 SQLiteConnection.Update(client) 不更新表条目?

Posted

技术标签:

【中文标题】为啥 SQLiteConnection.Update(client) 不更新表条目?【英文标题】:Why SQLiteConnection.Update(client) doesn't Update a table entry?为什么 SQLiteConnection.Update(client) 不更新表条目? 【发布时间】:2021-12-22 22:46:15 【问题描述】:

我正在解决一个运行良好的 android 应用程序中的错误,但是当我更新客户端时,它不会在数据库中进行更改。我正在构建一个查询,例如:

            StringBuilder query= new StringBuilder("PRAGMA encoding = \"UTF-8\"; UPDATE tclientes SET");
            //Building the query...
            query.AppendFormat(" WHERE cli_code = '0';", cliente.cli_code);
            Db.Query<tclientes>(query.ToString()); //this in a try-catch

它不会捕获任何错误,也不会更新条目。我也试过:

            Db.Update(cliente);

for 'client 是模型的一个实例,但这会触发错误:“System.NotSupportedException:无法更新客户端:它在 SQLite.SQLiteConnection.Update 处没有 PK”,可能是用作键的值(cli_code)是不足够的?我不知道该怎么办

编辑: 我也尝试过创建一个 SQLiteCommand 和绑定参数,但没有结果。它适用于“InsertOrUpdate(client)”,这很棒,但我仍然没有主要问题的答案

【问题讨论】:

表是如何定义的?第二条错误消息非常清楚地告诉您该表缺少 PK 【参考方案1】:

更新:

创建表和插入、更新数据库可以参考下面的代码。

var dbpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Mydb.db");
        var db = new SQLiteConnection(dbpath);
        db.CreateTable<Employee>();
        db.CreateTable<Duty>();
        var employee = new Employee
        
            Name = "Andrew",
            LastName = "Programmer"
        ;
        db.Insert(employee);


        var duty1 = new Duty()
        
            Description = "Project A Management",
            Deadline = new DateTime(2017, 10, 31)
        ;

        var duty2 = new Duty()
        
            Description = "Reporting work time",
            Deadline = new DateTime(2022, 12, 31)
        ;

        db.Insert(duty1);
        db.Insert(duty2);

        employee.Duties = new List<Duty>  duty1, duty2 ;
        db.UpdateWithChildren(employee);

【讨论】:

这适用于异步连接,但我有一个单音 SQLiteConnection,我不能这样称呼它 我更新了我的回复。请检查一下。

以上是关于为啥 SQLiteConnection.Update(client) 不更新表条目?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?