c# - 尝试使用 sqlite-net 通过 PrimaryKey 选择时,SQLite 没有结果

标签 c# sqlite windows-8 primary-key sqlite-net

对于此示例,我定义了以下类,该类保存在 SQLite 数据库中:

[SQLite.AutoIncrement, SQLite.PrimaryKey, SQLite.Indexed]
public int ID { get; set; }
[SQLite.Indexed]
public string ImageName { get; set; }

我正在使用 sqlite-net 提供的插入命令,它可以工作:
SQLiteAsyncConnection CurrentConnection = new SQLiteAsyncConnection("DB");
int result = await CurrentConnection.InsertAsync(this);

之后,我试图从 SQLite DB 中选择数据。
List<Image> result = new List<Image>();
if (ImageName != null)
{
    query = CurrentConnection.Table<Image>().Where(i => i.ImageName == ImageName);
    result = await query.ToListAsync();
}
if (ID != null && ID > 0)
{
    query = CurrentConnection.Table<Image>().Where(i => i.ID == ID);
    result = await query.ToListAsync();
}
if (result.Count > 0)
{
    LoadFromResult(result[0]);
    return;
}

通过 ImageName 选择时,一切正常,我得到了我需要的结果。但是,当尝试按 ID 选择时,不会选择任何结果。

我知 Prop 有给定 ID 的图像存在,因为我刚刚插入它并随后检查了 ID,但由于某种原因,这不起作用。

我是不是完全失明了,在这里漏掉了一个小字母?有没有人使用 SQLite-net 尝试通过主键选择?

//编辑

也试过这个,但没有奏效:
var query1 = await CurrentConnection.QueryAsync<Image>("select * from Image where ID = ?", ID);
if (query1.Count > 0)
{
    LoadFromResult(query1[0]);
    return;
}

//编辑 2

我对此有一点预感 - 当我插入图像时,ID 确实设置为某个 ID,但是当我选择数据库中的所有图像时,它们的 ID 都为 0。

知道为什么会发生这种情况吗?

最佳答案

我认为您的问题可能与您类(class)的 AutoIncrement 属性有关。
尝试删除 AutoIncrement 属性,看看是否可以通过 id 找到图像。

我认为正在发生的事情是 AutoIncrement 属性正在设置 Id,覆盖您创建的 id。
例如
假设您使用以下命令创建 MyImage 的实例:
MyImage i = new MyImage() { Id= 5 ,
图像名称="图像名称"}

当您运行 CurrentConnection.InsertAsync(i)(在空表上)时,插入到数据库的条目的 ID 为 1 ,而不是 5 .

希望有帮助

关于c# - 尝试使用 sqlite-net 通过 PrimaryKey 选择时,SQLite 没有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848966/

相关文章:

c# - 值(value)没有得到正确的答案

c# - 调用WebBrowser中的javascript函数,然后等到javascript事件触发

c# - 是否可以将用户过去的对话历史插入/注入(inject)聊天窗口对话框?

python-2.7 - python sqlite3 .executemany() 与命名占位符?

javascript - Windows 8 Javascript App,控制滚动条样式?

c# - 从正在运行的进程中获取 DLL 名称,可能吗?

c# - SQLite-Net Extensions如何正确地递归更新对象

c# - 让 ServiceStack 示例工作

c# - 如何在 Windows 8 应用程序中使用 c# 添加 Facebook RSS 提要?

javascript - Metro 应用程序可以切换到上次运行的应用程序吗?