我正在使用SQLitePCL制作UWP应用
我有一张名为" Song"
的表格CREATE TABLE IF NOT EXISTS Song
(ID INTEGER Primary Key AutoIncrement NOT NULL
, Artist VARCHAR(200)
, Title VARCHAR(200)
, Album VARCHAR(200)
, Path VARCHAR(255)
, Type VARCHAR(50));
检索功能:
private static async Task<Song> getSong(int sID)
{
//TODO IMPLIMENT TYPE CHECK
Song newsong = null;
using (var statement = dbConnection.Prepare(@"SELECT [ID],[Path] FROM Song WHERE ID = ?"))
{
statement.Bind(1, sID);
if(SQLiteResult.DONE == statement.Step())
{
string path = (string)statement[1];
StorageFolder folder = KnownFolders.MusicLibrary;
StorageFile songfile = await folder.GetFileAsync(path);
MusicProperties prop = await songfile.Properties.GetMusicPropertiesAsync();
newsong = new Song()
{
Id = (int)statement[0],
SongFile = songfile,
Artist = prop.Artist,
Album = prop.Album,
Title = prop.Title
};
}
}
return newsong;
}
问题是,似乎忽略了我设定的条件:
if(SQLiteResult.DONE == statement.Step()
这是一种错误的条件吗?我只想在遇到匹配ID的行后检索值。
答案 0 :(得分:3)
结果代码SQLiteResult.DONE
表示sqlite3_step()
已完成执行。在您的代码段中,如果您的数据表仍有需要阅读的行,statement.Step()
将返回SQLiteResult.ROW
结果代码,这意味着sqlite3_step()
有另一行准备好阅读,但未完成。
所以条件应该是
while (statement.Step() == SQLiteResult.ROW)
有关结果代码的更多详情,请参阅this article。