web-dev-qa-db-ja.com

sqlite dbが存在しない場合、プログラムで作成しますか?

Sqlite dbが存在しない場合、プログラムで作成しようとしています。次のコードを記述しましたが、最後の行で例外が発生しています。

_if (!System.IO.File.Exists("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"))
{
    Console.WriteLine("Just entered to create Sync DB");
    SQLiteConnection.CreateFile("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite");
    string sql = "create table highscores (name varchar(20), score int)";
    SQLiteCommand command = new SQLiteCommand(sql, sqlite2);
    command.ExecuteNonQuery();
}
sqlite2 = new SQLiteConnection("Data Source=C:\\Users\\abc\\Desktop\\1\\synccc.sqlite");
_

command.ExecuteNonQuery();行で例外を取得します。例外は_Invalid operation exception was unhandled_です。プロジェクトにsqliteファイルを追加する他の方法はありますか?手動でできますか?そうでない場合、どうすれば上記の問題を解決できますか?

19
zzzzz

データベースで任意の種類のデータ定義コマンドを実行するには、コマンドを渡すためのオープン接続が必要です。コードでは、クエリの実行後に接続を作成します。

もちろん、その作成後、接続を開く必要があります

if (!System.IO.File.Exists("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"))
{
    Console.WriteLine("Just entered to create Sync DB");
    SQLiteConnection.CreateFile("C:\\Users\\abc\\Desktop\\1\\synccc.sqlite");

    using(var sqlite2 = new SQLiteConnection("Data Source=C:\\Users\\abc\\Desktop\\1\\synccc.sqlite"))
    {
        sqlite2.Open();
        string sql = "create table highscores (name varchar(20), score int)";
        SQLiteCommand command = new SQLiteCommand(sql, sqlite2);
        command.ExecuteNonQuery();
    }
}

ただし、プロバイダーのバージョン3を使用する場合、ファイルの存在を確認する必要はありません。接続を開くだけで、ファイルが存在しない場合は作成されます。

30
Steve