2017-07-20 36 views
0

我正在使用SQLite-Net Extensions,並且在我對它進行一些操作之前,我想檢查一個表是否存在。這是我試過的:如何使用SQLite-Net Extensions進行低級/普通SQL查詢?

await this.database.ExecuteScalarAsync<int>("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='{0}'", tableName).ContinueWith(t => 
{ 
    System.Diagnostics.Debug.WriteLine(t.Result); 
}); 

輸出是0。如果我直接在數據庫上查詢,我會得到一個結果(1)。然後我試圖

var tableQuery = string.Format("SELECT name FROM sqlite_master WHERE type='table' AND name='{0}'", tableName); 
var result = await this.database.ExecuteAsync(tableQuery); 

,我得到一個異常:

SQLite.SQLiteException: Row 
    at SQLite.SQLiteCommand.ExecuteNonQuery() [0x0009b] in /Users/fak/Dropbox/Projects/sqlite-net/src/SQLite.cs:2172 
    at SQLite.SQLiteConnection.Execute (System.String query, System.Object[] args) [0x00040] in /Users/fak/Dropbox/Projects/sqlite-net/src/SQLite.cs:659 
    at SQLite.SQLiteAsyncConnection+<ExecuteAsync>c__AnonStorey9.<>m__0() [0x00013] in /Users/fak/Dropbox/Projects/sqlite-net/src/SQLiteAsync.cs:222 
    at System.Threading.Tasks.Task`1[TResult].InnerInvoke() [0x0000f] in <d18287e1d683419a8ec3216fd78947b9>:0 
    at System.Threading.Tasks.Task.Execute() [0x00010] in <d18287e1d683419a8ec3216fd78947b9>:0 
    at App.Database+<ClearTable>d__63.MoveNext() [0x00069] in xxx\Database.cs:1011 
    at App.Util.Helper+<CleanUpTemporaryFiles>d__8.MoveNext() [0x0013a] in xxx\Helper.cs:200 
    at App.Pages.DetailPage+<OnDisappearing>d__23.MoveNext() [0x000b1] in xxx\DetailPage.xaml.cs:449 

對於QueryAsync你需要用一個參數的構造函數的對象。

現在我不知道如何做一個簡單的SELECT查詢。有沒有辦法得到比更詳細的異常信息?

回答

1

將參數傳遞到SQL中的方式不正確。按照the docs,而不是

AND name='{0}' 

你應該使用:

name = ? 
+0

看來你是對的。我把它和'string.Format()'混合在一起。 ExecuteScalarAsync()是檢查表是否存在的合適方法嗎?除了「ContinueWith」還有其他選擇嗎? – testing

+0

如果它有效,那對我來說聽起來是合理的。 – mjwills