3Danke
ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
800
800
EMPFEHLEN
-
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
-
31.03.11 11:08 #2
- Registriert seit
- Mar 2011
- Beiträge
- 2
versuch mal :
sql = "SELECT * FROM 1_messe WHERE LFD_NR="'"+lfd_nr+"'""; //
-
Klappt auch nicht, aber trozdem danke
Gibt es vielleicht ein anderes Zeichen für das ' ?Geändert von labmx (31.03.11 um 11:15 Uhr)
-
Ok jetzt funktioniert es...
sql = "SELECT * FROM 1_messe WHERE LFD_NR='"+lfd_nr.Replace("'", "''")+"'";
-
04.04.11 19:48 #5
- Registriert seit
- Feb 2008
- Ort
- Salzhemmendorf(Nds)
- Beiträge
- 51
Spätestens hier sollte man sich Gedanken über SQL-Parameter machen, damit das Gewürge mit Strings und Hochkommas etc ein Ende hat.
Der Parametertyp wird automatisch angepasst, so dass der Coder sich hierum keine Gedanken machen muss.Code :1 2 3 4
MySqlCommand command = new MySqlCommand( SELECT * FROM 1_messe WHERE LFD_NR=@LFDNR, meineSqlVerbindung); command.Parameters.AddWithValue("@LDFNR", lfd_nr); ...
Eine andere Möglichkeit in C# ist das hier (sofern man genau weiss, welcher Feld-/Parametertyp notwendig ist):
Code :1 2 3
... 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.Geändert von raiguen (04.04.11 um 19:50 Uhr) Grund: Rechtschreib-/Syntaxfehler korrigiert
Es ist erstaunlich, was man alles findet, wenn man etwas sucht...
-
Danke, werd ich auch nochmal ausprobieren.
mfg labmx
-
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
-
06.04.11 19:23 #8
- Registriert seit
- Feb 2008
- Ort
- Salzhemmendorf(Nds)
- Beiträge
- 51
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:
Beachte: Char wird in einfachen Hochkommata gesetztCode :1
lfdnr.Replace('"', '_');
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]Geändert von raiguen (06.04.11 um 20:25 Uhr) Grund: ZUsatz eingefügt
Es ist erstaunlich, was man alles findet, wenn man etwas sucht...
-
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
-
07.04.11 16:35 #10
- Registriert seit
- Aug 2006
- Beiträge
- 204
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 :1 2
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.
-
hi tequila,
Danke für den Typ mit der SQL-Injection, ich werde das mal so einbauen...
Und das Beispiel von raiguen hatte ich auch so verbessert wie du es auch grad nochmal gesagt hast. Ich hatte nur einen Syntax Fehler, aber wie ich oben schon geschrieben habe, klappt das auch.
mfg labmx
-
Sofern du wirklich MySQL benutzt (das hast du nirgendwo erwähnt), hier noch mehr Tipps zur Verwendung des MySQL Connectors.
Es gibt bereits eine Methode zum maskieren der Zeichen
Code csharp:1
MySqlHelper.EscapeString();
Die brauchst du aber selten, da man wie bereits erwähnt Parameter verwenden sollte. Ich benutze dazu eigentlich ausschließlich folgendes Konstrukt.
Das macht natürlich nur Sinn für Webanwendungen, wo man nur einmal die Datenbank abfragt und dann fertig ist. Bei Denktopanwendungen würde man eher ein Verbindungs-Objekt mehrfach benutzen.
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
using(MySqlDataReader reader = MySqlHelper.ExecuteReader( "Connection String", "SELECT foo, bar FROM tabelle WHERE a=?a AND b=?b;",//Hier können auch mehrere Abfragen stehen. new MySqlParameter("?a", 127), new MySqlParameter("?b", "Ein ' String ' mit ' Hockkommas."), )) { if(!reader.HasRows) { //Ausgabe return; } while(reader.Read()) { reader.GetInt32(0); reader.GetTimeSpan(1); //... } //Falls man mehrere Abfragen hat reader.NextResult(); }
-
08.04.11 14:23 #13
- Registriert seit
- Feb 2008
- Ort
- Salzhemmendorf(Nds)
- Beiträge
- 51
Moin

ähm...sorry für meinen etwas fehlerhaften Code bzw Flüchtigkeitsgehler inform von vergessenen Stringbegrenzer (")
Aber hat ja anscheinend doch zum Erfolg geführt
Übrigens: das @ für eine Parameterbezeichnung in MySql funktioniert bei mir tatdellos
Es ist erstaunlich, was man alles findet, wenn man etwas sucht...
Ähnliche Themen
-
TreeMap<String,HashMap<String,String>> sortieren
Von ChantalM im Forum JavaAntworten: 4Letzter Beitrag: 07.02.11, 16:32 -
public String replaceAll(String regex, String replacement) und das $-Zeichen
Von takidoso im Forum JavaAntworten: 5Letzter Beitrag: 22.11.10, 17:31 -
PHP String für Javascript String Escapen. (String über mehrere Zeilen)
Von Lukasz im Forum PHPAntworten: 2Letzter Beitrag: 04.09.06, 12:07 -
String Problem
Von Kleiner Wicht im Forum C/C++Antworten: 3Letzter Beitrag: 31.08.05, 11:47 -
string problem
Von Hampfibius im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 12.06.05, 22:51





Zitieren

Login





