2016-11-26 57 views
0

我正在做一個UWP應用與SQLitePCLSQLitePCL選擇呼叫 - ISQLiteStatement.Step檢索條件

我稱之爲 「宋」

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的行時檢索值。

+2

Step'實際返回什麼值? –

+0

還要注意,SQLite忽略所有'varchar'大小 - [所有內容都只是'text'](http://www.sqlite.org/datatype3.html) –

+0

Step返回Row – Jon

回答

3

結果代碼SQLiteResult.DONE表示sqlite3_step()已完成執行。在你的代碼片段中,如果你的數據表仍然有行需要閱讀,statement.Step()將返回SQLiteResult.ROW結果代碼,這意味着sqlite3_step()有另一行準備閱讀,沒有完成。

所以狀態應該是大致的結果代碼,請參考this article

while (statement.Step() == SQLiteResult.ROW) 

更多細節。