Laden...

SQL mit ' zusammen basteln bzw ersetzen

Erstellt von Riv3r vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.774 Views
R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren
SQL mit ' zusammen basteln bzw ersetzen

verwendetes Datenbanksystem: AS/400 bzw. SQL-Server

Hallo

ich habe einen sehr langen Insert bzw Update Befehl mit dem ich Inhalte von Textboxen in deine Datenbank speichere.

Wenn jetzt jemand in eine TB ein ' schreibt kommt logischerweise ein Fehler bei der Ausführung des SQLs.

Ich hönnte bei jeder TB jetzt alle ' ersetzen oder löschen aber das wäre ziemlich viel Aufwand da es viele Boxen sind.

Gibt es keine schönere/schnellere Lösung indem man z.b. alle ' die auf einem Panel und den darauf liegenden TBs ersetzt oder so?

Danke schonmal

Max

A
254 Beiträge seit 2007
vor 16 Jahren

Hallo,

weiss ich nicht, ob der Aufwand so gross ist. Musst ja nur eine Methode schreiben, die die Ersetzung vornimmt. Diese kannst Du ja für jede Textbox aufrufen.

Aber der bessere Weg ist sicher die Werte mit Parameter Objekten zu übergeben.

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

Aber dann muss ich die Methode auch für jede Textbox aufrufen - dann könnte ich auch gleich Replace nutzen...

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo Riv3r,

bitte bastle Dir den SQL Command nicht über eine String-Concat Anweisung zusammen. Verwende stattdessen besser SQLParameter. Hier in diesem Forum nach "SQL Parameter" gesucht wirst Du auch fündig, wie man so etwas anwendet.

Das hat mehrere Vorteile:

  • beugt vor SQL Injection vor
  • ist weniger Fehleranfällig
  • Ist meiner Meinung nach auch übersichtlicher

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

Ich nutze eine IBM Komponente und dort wird der Command per String übergeben (hab bevor ich C# angefangen hab das auch so gemacht und komme ganz gut damit zurecht...)

außerdem bleibt das Problem mit den ' trotzdem oder nicht?

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo Riv3r,

ich kenne die IBM Komponente nun nicht, deshalb kann ich Dir hier keinen genauen Ratschlag geben.

außerdem bleibt das Problem mit den ' trotzdem oder nicht?

Das wäre mit den Parametern erschlagen, denn dort wird das Hochkomma einfach als String über den Parameter eingefügt, und ist somit kein Schlüsselzeichen im SQL-Befehl. Das wäre ja das schöne daran 😉

Eventuell (hab ich aber noch nie ausprobiert) wäre es möglich trotzdem das SqlCommand per Parameter zusammenbasteln zu lassen. Und anstatt ein "Execute" könntest Du Dir dann die String-Ausgabe geben lassen (ist aber nicht gesagt, dass das so funktioniert, auch aufgrund des SQL-Slangs Deiner IBM Komponente??)

Falls das nicht geht, dann solltest Du Dir einen SQL-Helper bauen, der die Parameterfunktionalität abbildet und da eingegebenen Text (z.B. aus Deinen TextBoxen) auf Schlüsselzeichen parst und entsprechende Escape-Sequenzen voranstellt.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

R
Riv3r Themenstarter:in
206 Beiträge seit 2007
vor 16 Jahren

werds mal versuchen - evtl bekomm ich das mit dem Parametern hin...

Meld mich wieder...

D
115 Beiträge seit 2006
vor 16 Jahren

Kurze Zwischenfrage weils grade zum Thema passt:

Wenn ich mir den CommandText von meinem Command geben lasse enthält das immer die Platzhalter für die Parameter? Damit wäre der Text ja für die IBM-Komponente unbrauchbar.
Wie kann ich das Command denn so ausgeben lassen, das die Paramter fertig eingefügt werden ?

4.506 Beiträge seit 2004
vor 16 Jahren

Hallo d.gierse,

das ist das was ich eventuell befürchtet habe. Deshalb habe ich geschrieben, falls das nicht funktioniert, dann muss man doch auf einen eigenen "SqlHelper" zurückgreifen, der das dann parst und ersetzt.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

D
115 Beiträge seit 2006
vor 16 Jahren

Ach so, ja dann ist auch ok. Ich dachte nur da würde es jetzt irgendeinen Trick geben den ich noch nicht kenne 🙂