この例では、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 で選択しようとすると、結果が選択されません。
指定された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 に設定されますが、DB 内のすべての画像を選択すると、すべての画像の ID が 0 になります。
なぜこれが起こるのかについて何か考えはありますか?