web-dev-qa-db-fra.com

Créer par programmation sqlite db s'il n'existe pas?

J'essaie de créer une base de données sqlite par programme si elle n'existe pas. J'ai écrit le code suivant mais j'obtiens une exception à la dernière ligne.

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");

J'obtiens l'exception à la ligne command.ExecuteNonQuery(); L'exception est Invalid operation exception was unhandled. Existe-t-il un autre moyen d'ajouter un fichier sqlite à votre projet? Puis-je le faire manuellement? Sinon, comment puis-je résoudre le problème ci-dessus?

19
zzzzz

Pour exécuter tout type de commande de définition de données sur la base de données, vous avez besoin d'une connexion ouverte pour passer la commande. Dans votre code, vous créez la connexion APRÈS l'exécution de la requête.

Bien sûr, après cette création, vous devez ouvrir la connexion

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();
    }
}

Cependant, si vous utilisez la version 3 du fournisseur, vous n'avez pas à vérifier l'existence du fichier. Le simple fait d'ouvrir la connexion créera le fichier s'il n'existe pas.

30
Steve