2012-03-04 13 views
5

Witam następujący kod daje błąd składni. Nie wiem jak rozwiązać problem.Sqlite "Update" C# Błąd składniowy

Błąd

{ "SQLite błąd \ r \ nnear \" myText \ ": błąd składni"}

mój kod

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

Aby uniknąć tego rodzaju błędów (i zastrzyków SQL), powinieneś używać parametrów zapytań, a nie dynamicznie tworzyć łańcuch poleceń SQL. – svick

+2

@ user1248067: * Proszę * nie używaj zaakceptowanej odpowiedzi tak jak jest. Powinieneś * naprawdę, naprawdę * użyć sparametryzowanego SQL. –

Odpowiedz

21

Inni sugerowali alternatywne sposoby konstruowania SQL, ale w ogóle nie powinniście uwzględniać wartości w SQL. Powinieneś używać sparametryzowanej kwerendy, która pomija między innymi SQL injection attacks.

Nie jest dla mnie jasne, który sterownik jest używany, ale zakładając, że jest to Devart.com, dokumentacja dla SQLiteCommand.Parameters daje dobry przykład, jak to zrobić. W twoim przypadku kod stanie się mniejszy:

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

Nie jestem pewien, czy jest to problem z wersją; ale musiałem użyć "DbType.String" zamiast "SqLiteType.Text". Używam wersji SQLite 1.0.99 – sapbucket

+0

@sapbucket: Mmm ... będzie edytować. –

5

Przegapiłeś ' 2 razy

Spróbuj tego:

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