web-dev-qa-db-fra.com

Requête d'insertion simple SQLite

J'essaie d'utiliser SQLite comme stockage. J'ai ajouté une DLL de référence en utilisant nuget et en utilisant une instruction également.

J'ai

private void SetConnection()
{
            sql_con = new SQLiteConnection
                ("Data Source=c:\\Dev\\MYApp.sqlite;Version=3;New=False;Compress=True;");
}

private void ExecuteQuery(string txtQuery)
{
            SetConnection();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            sql_cmd.CommandText = txtQuery;
            sql_cmd.ExecuteNonQuery();
            sql_con.Close(); 
}

et j'envoie une requête txt comme celle-ci

public void Create(Book book)
{
            string txtSqlQuery  = "INSERT INTO Book (Id, Title, Language, PublicationDate, Publisher, Edition, OfficialUrl, Description, EBookFormat) ";
            txtSqlQuery += string.Format("VALUES (@{0},@{1},@{2},@{3},@{4},@{5},@{6},@{7},{8})", 
                        book.Id, book.Title, book.Language, book.PublicationDate, book.Publisher, book.Edition, book.OfficialUrl, book.Description, book.EBookFormat);
                   try
                   {
                       ExecuteQuery(txtSqlQuery);
                   }
                   catch (Exception ex )
                   {
                       throw new Exception(ex.Message);
                   }    
}

Ma base de données est correctement créée et l'instance de livre passée avec des données valides est correcte. Mais une exception est toujours levée lors de l'exécution d'une requête sur cette ligne de code:

sql_cmd.ExecuteNonQuery();

Je fais évidemment quelque chose de mal ici mais je ne peux pas voir.

Mise à jour: le message d'exception levé est

Erreur de logique SQL ou base de données manquante

jeton non reconnu: "22cf"

où ce 22cf fait partie du passé book.Id chaîne de guidage.

14
user2783193

N'insérez JAMAIS vos données dans votre relevé!

Utilisez des instructions préparées et des paramètres de liaison:

public void Create(Book book) {
    SQLiteCommand insertSQL = new SQLiteCommand("INSERT INTO Book (Id, Title, Language, PublicationDate, Publisher, Edition, OfficialUrl, Description, EBookFormat) VALUES (?,?,?,?,?,?,?,?,?)", sql_con);
    insertSQL.Parameters.Add(book.Id);
    insertSQL.Parameters.Add(book.Title);
    insertSQL.Parameters.Add(book.Language);
    insertSQL.Parameters.Add(book.PublicationDate);
    insertSQL.Parameters.Add(book.Publisher);
    insertSQL.Parameters.Add(book.Edition);
    insertSQL.Parameters.Add(book.OfficialUrl);
    insertSQL.Parameters.Add(book.Description);
    insertSQL.Parameters.Add(book.EBookFormat);
    try {
        insertSQL.ExecuteNonQuery();
    }
    catch (Exception ex) {
        throw new Exception(ex.Message);
    }    
}
50
LS_ᴅᴇᴠ