1

存在する場合、Windows ストア アプリケーションで sqlite データベースを読み取りたい...

通常、データベースからテーブルを読み取るには、テーブルが配置されているパスを設定してから、SQLiteConnection 関数を呼び出します...

質問は、このような単純な関数を呼び出したときにデータベースが存在しないのはなぜですか

public static async Task<ObservableCollection<Objects>> GetAll()
    {
        List<Objects> list;
        using (var db = new SQLiteConnection(dbPath))
        {
            // Activate Tracing
            db.Trace = true;

            list = (from p in db.Table<Objects>()
                            select p).ToList();

        }

データベースが作成されますか?

new SQLiteConnection(dbPath)が呼び出されると、空のデータベースが作成されます。作成せずに接続を開くことは可能ですか?

4

2 に答える 2

5

使用しているコンストラクターのコードを見ると、

public SQLiteConnection (string databasePath, bool storeDateTimeAsTicks = false)
            : this (databasePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create, storeDateTimeAsTicks)
{
}

DB が存在しない場合に DB を作成するように SQLite に指示するフラグを渡すことがわかります。

これを避けるには、別のコンストラクターを使用してください -

public SQLiteConnection (string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = false)

このような -

using (var db = new SQLiteConnection(dbPath, SQLiteOpenFlags.ReadWrite))

DB が存在しない場合、SQLiteException がスローされることに注意してください。

別の可能な解決策は、開く前にファイルの存在を手動で確認することです。

于 2014-04-18T17:20:43.860 に答える
0
public async Task<bool> IsDbExists(string fileName)
    {
        try
        {
            var item = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
            var db = new SQLiteConnection("Your db path");
            var tb1 = db.GetTableInfo("TableName1");
            var tb2 = db.GetTableInfo("TableName2");
            var tb3 = db.GetTableInfo("TableName3");
            var tb4 = db.GetTableInfo("TableName4");
            if (item == null || tb1.Count == 0 || tb2.Count == 0 || tb3.Count == 0 || tb4.Count == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        catch
        {
            return false;
        }
    }
于 2015-02-27T01:56:22.913 に答える