c#
  • database
  • sqlite
  • sqlite-net
  • sqlite-net-extensions
  • 2017-07-20 3 views 0 likes 
    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); 
    

    を試してみましたが、私は例外を取得:QueryAsyncについては

    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 
    

    あなたはパラメータなしのコンストラクタを持つオブジェクトが必要です。

    今、単純なSELECTクエリの作成方法はわかりません。 よりも詳細な例外メッセージを取得する方法もありますか?

    答えて

    1

    SQLにパラメータを渡す方法が間違っています。代わりにあなたが使用する必要があります

    AND name='{0}' 
    

    の、the docsあたりとして:

    name = ? 
    
    +0

    は、あなたが正しいと思われます。これを 'string.Format()'と混在させました。 ExecuteScalarAsync()は、テーブルが存在するかどうかを調べるのに適したメソッドですか? 'ContinueWith'以外のオプションはありますか? – testing

    +0

    それがうまくいくなら、それは私には妥当な@testingと聞こえます。 – mjwills

    関連する問題