Программно создавать 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 файл в ваш проект? Могу ли я сделать это вручную? Если нет, то как я могу решить вышеупомянутую проблему?

Ответ 1

Для выполнения любого вида команды определения данных в базе данных вам нужно открытое соединение для передачи команды. В вашем коде вы создаете соединение ПОСЛЕ выполнения запроса.

Конечно, после этого создания, вам нужно открыть соединение

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 провайдера, вам не нужно проверять наличие файла. Простое открытие соединения создаст файл, если он не существует.