[C#] Problem mit String im SQL

labmx

Grünschnabel
Hi Leute,
ich arbeite derzeit an einem projekt bei dem ich Werte aus der Datebank holen möchte.
Mein SQL-Befehl sieht so aus:
sql = "SELECT * FROM 1_messe WHERE LFD_NR='"+lfd_nr+"'";

Das Problem ist das die String-Variable lfd_nr diesen Inhalt hat:
LS'11
Dadurch gibt es Probleme mit den Hochkommatas...

Kann mir da jemand helfen?

mfg labmx
 
Klappt auch nicht, aber trozdem danke
Gibt es vielleicht ein anderes Zeichen für das ' ?
 
Zuletzt bearbeitet:
Ok jetzt funktioniert es...

sql = "SELECT * FROM 1_messe WHERE LFD_NR='"+lfd_nr.Replace("'", "''")+"'";
 
Spätestens hier sollte man sich Gedanken über SQL-Parameter machen, damit das Gewürge mit Strings und Hochkommas etc ein Ende hat.

Code:
MySqlCommand command = new MySqlCommand(
SELECT * FROM 1_messe WHERE LFD_NR=@LFDNR, meineSqlVerbindung);
command.Parameters.AddWithValue("@LDFNR", lfd_nr);
...
Der Parametertyp wird automatisch angepasst, so dass der Coder sich hierum keine Gedanken machen muss.

Eine andere Möglichkeit in C# ist das hier (sofern man genau weiss, welcher Feld-/Parametertyp notwendig ist):
Code:
...
String.Format("SELECT * FROM 1_messe WHERE LFD_NR={0}", lfd_nr);
...

Inwiefern sich das Statement dann mit dem Hochkomma im übergebenen (Parameter)-Wert/String klar kommt, ... . Ausprobieren ;)

Ich arbeite n.M. aber am liebsten mit Parametern.
 
Zuletzt bearbeitet:
Hi,
bei dem Problem mit ' klappt das ganz gut mit dem Replace...
Jetzt habe ich einen Text der gespeichert werden soll indem " " drin stehen, diese "Gänsefüschen" kann man nicht mit Replace ersetzten. Auch deine Methoden mit den Parametern haben nicht geklappt.

Vielleicht noch eine andere Idee?

mfg labmx
 
Die Methode .Replace hat 2 Überladungen:
1. Replace(oldStringValue, newStringValue)
2. Replace(oldCharValue, newCharValue(

Und wie hilft das weiter? Ganz einfach:
Wenn Du die " ersetzen willst, dann musst Du die " als Char übergeben:
Code:
lfdnr.Replace('"', '_');
Beachte: Char wird in einfachen Hochkommata gesetzt ;)
Zur Verdeutlichung den oa. code mal farbig: lfdnr.Replace('"', '_')

Was genau bitte hat mit der Parameterlösung nicht geklappt? Bzw welche (Sql-Parameter oder String.Format)?

[ZUSATZ] Wenn unterschiedliche 'Sonderzeichen' im Suchtext vorkommen, dann sollte m.E. natürlich vor dem eigentlichen SQS-Statemant der Suchstring entsprechend analysiert werden und das SQL-Statement angepasst werden ;)
[/ZUSATZ]
 
Zuletzt bearbeitet:
Hi raiguen,
ich hab das gestern abend noch einmal ausprobiert mit den Parametern, das klappt jetzt auch.
Bei den "Gänsefüschen" hab ich mir dieses rausgsucht:
lfdnr.Replace("\"", "\"\"");

Mit den Backslash wird die "Grenzfunktion" aufgehoben, sodass die "Gänsefüschen" als normales Sonderzeichen erkannt werden.
Ich probier deine Variante nachher auch nochmal aus.;)

mfg labmx
 
Hallo labmx,

google mal bitte nach SQL-Injection. Denn das ist die Gefahr die du hier eingehst. Anschließend schaust du dir bitte noch einmal das Konstrukt von raiguen an:

Code:
MySqlCommand command = new MySqlCommand("SELECT * FROM 1_messe WHERE LFD_NR=@LFDNR", meineSqlVerbindung);
command.Parameters.AddWithValue("@LDFNR", lfd_nr);

In seinem Beispiel fehlten die Anführungszeichen um das Select-Statement. Und du solltst dir vorher halt eine MySQLConnection für meineSqlVerbindung erstellt haben.
 

Neue Beiträge

Zurück