2011-01-04 15 views
2

Ich arbeite an meiner ersten Datenbankanwendung. Es ist eine WinForms-Anwendung, die in C# mithilfe einer SQLite-Datenbank geschrieben wird.SQLite Probleme, bestimmte Zeichen zu entkommen

Ich habe einige Probleme festgestellt, wenn ein Apostroph verwendet wird, schlägt meine SQLite-Abfrage fehl. Hier ist die Struktur meiner Abfragen.

string SQL = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = '" + jobSite + "'"; 

Zum Beispiel, wenn ein Apostroph in der Baustelle var verwendet wird, versetzt es die anderen Apostrophe in dem Befehl, und schlägt fehl.

Also meine Fragen sind:

1. Wie entkommen ich Zeichen wie das Apostroph und Semikolon in der obigen Abfrage Beispiel?

2. Welche Zeichen brauche ich, um zu entkommen? Ich weiß, ich sollte dem Apostroph entkommen, was ist sonst noch gefährlich?

Danke für Ihre Hilfe!

+0

ich wirklich eine andere Frage zu vermeiden, möchte fragen, eine Ergänzung zu meinen Fragen oben, kann mir jemand zeigen, wie eine Abfrage, wie ich sie oben mit Hilfe von Parametern mit dem UPDATE haben zu bauen/WO Befehl? Ich habe viele Beispiele für Abfragen mit Parametern gesehen, aber sie verwenden immer den INSERT-Befehl. – CODe

Antwort

4

Rather Parameter verwenden

Es gibt einen vorherigen Stapelüberlauf Frage über sie

Adding parameters in SQLite with C#

, wenn Sie mehr Funktionalität benötigen auch

http://sqlite.phxsoftware.com/

Entity Framework verwenden, können Sie Es tut mir leid, nicht mit der Syntax vertraut zu sein, aber das Konzept sollte dasselbe sein. Etwas wie:

SQLiteCommand Command = "UPDATE SUBCONTRACTOR SET JobSite = NULL WHERE JobSite = @JobSite"; 
Command.Parameters.Add(new SQLiteParameter("@JobSite", JobSiteVariable)); 
command.ExecuteNonQuery(); 
+0

Danke! Aber wie ändere ich meine UPDATE/WHERE-Abfrage, um Parameter zu verwenden? Ich sehe viele Beispiele für die Verwendung von Parametern, aber sie verwenden immer INSERT. – CODe

2

ein Apostroph fügen Sie eine weitere Apostroph zu entkommen ...

so eine Zeichenfolge wie it's eingefügt werden soll als it''s

Sie auch entkommen Anführungszeichen müssen. Die Art und Weise, dies zu tun ist, einen umgekehrten Schrägstrich als Escape charater zu verwenden ...

wie so ... 'and he said\"escape all those quotes\"'

Sie auch von SQL-Injektionen ... je nach Art des Programmiersprache Sie sind Hüten Dort gibt es verschiedene Funktionen, mit denen sich bösartiger Code entfernen lässt.

C# tutorial on SQL Injections for example

+0

Danke für den Beitrag, hattest du zufällig etwas Literatur zum Verständnis meiner zweiten Frage? – CODe

+0

@CODE Ich habe eine Änderung an meinem Beitrag vorgenommen, wie Sie es wünschen. – Bnjmn

+0

Danke! Wie ändere ich ihre "richtige Methode zum Erstellen einer Ad-hoc-SQL-Abfrage" mit einem Befehl "update/where" anstelle eines Befehls "insert"? – CODe

1

Sie sollten nie Strings verketten, um SQL-Abfragen für SQLite zu bauen - oder für jede andere SQL-DB möglich, wenn. Es macht Ihren Code fragil und eröffnet potenzielle Einstiegspunkte für Injektionsangriffe.

Der richtige Weg ist, hosted parameters zu verwenden. Dieser Ansatz beseitigt die Notwendigkeit einer umständlichen String-Filterung. Ich bin mir nicht sicher, wie das in C# für SQLite zu tun ist, aber jede anständige Sprachbindung für SQLite sollte es Ihnen ermöglichen, gehostete Parameter zu verwenden.