2012-03-04 13 views
5

Ciao codice seguente fornisce un errore di sintassi. Non so come risolvere il problema.Sqlite "Update" C# Errore di sintassi

L'errore

{ "Errore di SQLite \ r \ nnear \" MyText \ ": Errore di sintassi"}

My Code

string dataSource = "Database.s3db"; 
SQLiteConnection connection = new SQLiteConnection(); 
connection.ConnectionString = "Data Source=" + dataSource; 
connection.Open(); 
SQLiteCommand command = new SQLiteCommand(connection); 
command.CommandText = ("update Example set Info ='" + textBox2.Text + ", Text ='"+textBox3.Text + "where ID ='" + textBox1.Text +"'"); 
command.ExecuteNonQuery(); 
+2

Per evitare questo tipo di errori (e iniezioni SQL), è necessario utilizzare i parametri di query, non creare la stringa di comando SQL in modo dinamico. – svick

+2

@ user1248067: * Si prega di * non utilizzare la risposta accettata così com'è. Dovresti * davvero, davvero * usare l'SQL parametrizzato. –

risposta

21

Altri hanno suggerito metodi alternativi di costruzione dell'SQL, ma non dovresti includere affatto i valori nell'SQL. Si dovrebbe usare una query parametrizzata, che evita lo SQL injection attacks tra le altre cose.

Non mi è immediatamente chiaro quale driver si sta utilizzando, ma supponendo che si tratti di Devart.com, la documentazione di SQLiteCommand.Parameters fornisce un buon esempio di come farlo. Nel tuo caso, il codice diventerebbe qualcosa del tipo:

string dataSource = "Database.s3db"; 
using (SQLiteConnection connection = new SQLiteConnection()) 
{ 
    connection.ConnectionString = "Data Source=" + dataSource; 
    connection.Open(); 
    using (SQLiteCommand command = new SQLiteCommand(connection)) 
    { 
     command.CommandText = 
      "update Example set Info = :info, Text = :text where ID=:id"; 
     command.Parameters.Add("info", DbType.String).Value = textBox2.Text; 
     command.Parameters.Add("text", DbType.String).Value = textBox3.Text; 
     command.Parameters.Add("id", DbType.String).Value = textBox1.Text; 
        command.ExecuteNonQuery(); 
    } 
} 
+0

Non sono sicuro se si tratta di un problema di versione; ma ho dovuto usare "DbType.String" al posto di "SqLiteType.Text". Sto usando SQLite versione 1.0.99 – sapbucket

+0

@sapbucket: Mmm ... verrà modificato. –

5

vi siete persi la ' 2 orari

Prova questo:

command.CommandText = ("update Example set Info ='" + textBox2.Text + "', Text ='"+textBox3.Text + "' where ID ='" + textBox1.Text +"'");