c# - 在更新查询期间它抛出 NotSupportedException?

标签 c# sqlite windows-8

我正在 Windows 应用商店应用程序中处理 SQLite。我正在使用更新表中的值

var tagPage = db.QueryAsync<MyModel>("UPDATE MyModel SET Tag =2 WHERE id = 1");
db.UpdateAsync(tagPage);

它通过该方法在 SQLite.cs 类上抛出 NotSupportedException

public int Update(object obj, Type objType)
{
    if (obj == null || objType == null)
        {
            return 0;
        }

        var map = GetMapping(objType);

        var pk = map.PK;

        if (pk == null)
        {
            throw new NotSupportedException("Cannot update " + map.TableName + ": it has no PK");
        }

        var cols = from p in map.Columns
                   where p != pk
                   select p;
        var vals = from c in cols
                   select c.GetValue(obj);
        var ps = new List<object>(vals);
        ps.Add(pk.GetValue(obj));
        var q = string.Format("update \"{0}\" set {1} where {2} = ? ", map.TableName, string.Join(",", (from c in cols
                                                                                                        select "\"" + c.Name + "\" = ? ").ToArray()), pk.Name);
        return Execute(q, ps.ToArray());
}

因为我认为它不会获得主键,我在表中提供了主键。 我尝试使用 async 和 wait 但没有用,为什么会发生这种情况?请帮助我

最佳答案

关于您的 NotSupportedException 问题 - 我怀疑您的模型缺少 PrimaryKey 属性:

public class MyModel
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    public int Tag { get; set; }        
    public string Foo { get; set; }
}

您将需要上面的属性,即使您的数据库架构已经定义了它们。此时,Sqlite-Net 不会从数据库读取架构数据。

其他一些想法:

首先,您应该仅使用同步 Sqlite-Net API 或异步 API。两者都不要使用。

我个人更喜欢同步 API,因为它看起来更最新。异步 API 已经 11 个月没有更新了,而同步 API 则在 4 个月前更新过。除此之外,我一直无法弄清楚如何使用异步 API 进行交易。再次强调,这是个人喜好。

其次,QueryQueryAsync 方法应仅用于查询(对于 SELECT)。它们不应该用于UPDATE。对于添加/更改数据,您将需要使用这些同步方法:ExecuteUpdateInsert 等。如果使用异步 API,还有异步对应项(ExecuteAsync 等)。

请阅读Sqlite-Net Project page ,因为您会在那里找到很多有关一般 API 使用的有用信息。

关于c# - 在更新查询期间它抛出 NotSupportedException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17446332/

相关文章:

c# - 我已经成功地将 CefSharp 嵌入到 .NET 4.0 应用程序中。是否有可能让 jQuery 调用在 DOM 上工作?

c# - 按列循环数据表

c# - 在 WinRT 应用程序中处理两个、三个、四个手指滑动手势

c# - C# 中的字符串替换

java - ListView内存问题

android.database.sqlite.SQLITeException : no such table: admin while compiling: INSERT INTO . ..等

c# - SQLite中参数的使用

ruby-on-rails - 使用Windows8和aptana调试ruby

android - 为什么此页面不适合屏幕?

c# - 这是 using 的正确用法吗?