Ich habe ein Textfeld und es bricht meine SQL-Anweisung. Wie entkomme ich allen Zeichen in diesem Feld? Ich verwende SQLite mit http://sqlite.phxsoftware.com/ in C#SQL Escape mit SQLite in C#
Antwort
Sie sollten einen Parameter wie in werden:
SQLiteCommand cmd = _connection.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM MyTable WHERE MyColumn = @parameter";
cmd.Parameters.Add(new SQLiteParameter("@parameter", textfield));
SQLiteDataReader reader = cmd.ExecuteReader();
Mit einem parametrisierte SQL werden alle Eingabewerte entkommen und von SQL-Injection-Angriffe schützen Ihnen zu helfen.
Sie können auch alle Apostroph Begrenzungszeichen mit Zweifeln einfache Anführungszeichen (nicht „) ersetzen.
sql = sql.Replace("'","''");
Diese Methode ist nicht re empfohlen, kann es zu seltsamen Bugs führen. – Palani
Nicht unbedingt. Wenn Sie Ihre SQL erstellen und den letzten Schritt ersetzen, sollte alles gut sein. Arbeitete jahrelang ohne Probleme. Ich benutze jetzt die Anwendungsblöcke, also spielt es keine Rolle. :) – klkitchens
Diese Methode ist gut, wenn Sie einen SQL-Safe erstellen müssen, um in eine Textdatei oder ähnliches zu speichern. –
Was kann ich tun, wenn ich mehr params habe? Schreibe ich cmd.CommandText =“ insert ... @ parameter ... @parameter "; cmd.Parameters.Add (...); cmd.Parameters.Add (...);? –
Ja, es sollte auch eine AddRange-Methode verfügbar sein, über die Sie ein Array übergeben können Parameter, die den params im sql statemenet entsprechen –
Sie können Parameter aufrufen.Fügen Sie mehrere Male genau so ein, wie Sie gefragt haben, oder verwenden Sie die Parameter.AddRange, die ein Array von Parametern akzeptiert – bstoney