Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - wie kann ich mit string replace hochkommata ersetzen
Mustermann - Fr 26.03.10 10:32
Titel: wie kann ich mit string replace hochkommata ersetzen
Hallo Forum.
Ich habe ein Problem. Ich möchte mit dem SQL-Befehl nach einem teil des Textes suchen, der einen oder mehrere Hochkommata beinhält. Wie zum Beispiel OS'Microsoft. Dies wird aber nicht gemacht. Ich dachte mir man könte das mit string.Replace machen und die zweite Überladung nehmen für character dann müsste das so aussehen StringVariablenname.Replace(''','\''); und das nimmt er aber nicht an. Kann mir jemand sagen was man da machen könnte? oder gibts eine andere Möglichkeit nach einem Text zu suchen, der Hochkommata beinhält?
Danke
Moderiert von
Narses: Topic aus Programmierwerkzeuge verschoben am Fr 26.03.2010 um 12:03Moderiert von
Narses: Topic aus Datenbanken verschoben am Fr 26.03.2010 um 14:53
JoelH - Fr 26.03.10 10:58
Probier mal
Delphi-Quelltext
1:
| s := stringreplace(s,'''','\''',[rfReplaceAll]); |
Mustermann - Fr 26.03.10 11:01
macht er nicht mit :(
JoelH - Fr 26.03.10 11:32
achso, jetzt wirds klar.
Du musst die die Hochkommas verdoppeln.
Also wenn du folgendes Statement hast
SELECT * FROM TABELLE WHERE NAME like '%OS'Microsoft%'
dann ists nicht legal.
maskiert wird das (zumindes in Oracle) indem das Hochkomma verdoppelt wird.
also
SELECT * FROM TABELLE WHERE NAME like '%OS
''Microsoft%'
dann musst du natürlich den Stringreplac anpassen einfach
Delphi-Quelltext
1:
| s := stringreplace(s,'''','''''',[rfReplaceAll]); |
zuma - Fr 26.03.10 12:09
macht er nicht mit <-- jetzt weiss natürlich jeder ganz genau, wo das problem liegt ;)
Warum ersetzen (stringreplace), wenn du suchen willst?
suchen wirklich mit einem sql-befehl in einer Datenbank?
was willst du denn genau machen?
ein zeichen ersetzen??
einen string mit einem bestimmten zeichen in der DB (Sql) suchen?
ein Zeichen in einem String suchen ?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure Button1Click(Sender: TObject); var s : string; begin inherited; s := 'Ein text mit os''microsoft '; showmessage(s); s := 'Select ... from ... where ... like %''%'; showmessage(s); if (pos('''', s) > 0) then showmessage('Hochkomma enthalten'); s := StringReplace(s, '''', '\', [rfReplaceAll]); showmessage(s); end; |
mach dir mal nen button und kopier den code in die buttonclick-methode, dann siehst du evtl. besser die unterschiede
Mustermann - Fr 26.03.10 12:36
Ich möchte dem Benutzer die möglichkeit geben einen Text mit Hochkommata zu speichern und danach später zu suchen. OS'Microsoft war nur ein Beispiel, aber der benutzer kann einen text auch mit 20 Hochkommata speichern und wie soll ich das abfangen? Deswegen dachte ich mir string.Replace wäre nicht schlächt, weill er alle charaktere ersetzen kann, die in dem String vorkommen. Durch google Recharche habe ich gefunden, dass man die Hochkommata maskieren kann mit escabe bzw. backslash \. Wenn ich versuceh in so einem String 'm'a Hochkommata zu maskieren bekomme ich als Fehlermelgund
SQL-Syntax Error
Wie gehe ich vor: string v = A_Ausstattung_Bez.Replace("'", "\'");
Und heir knallt er: lv_MSQLDA_adapter = new MySqlDataAdapter(lvStr_Sql, con);
bakachan - Fr 26.03.10 12:49
' werden für SQL doch mit einem weiteren ' maskiert oder?
also:
' -> ''
'' -> ''''
'a''b' -> ''a''''b''
JüTho - Fr 26.03.10 12:53
Kümmere dich überhaupt nicht um die Hochkommata, sondern benutze
Parameter! Dann macht der DbProvider alles selbst richtig.
Ein Minimalbeispiel steht im vorletzten Beitrag bei
Der Name "Settings" ist im aktuellen Kontext nicht vorhanden [
http://www.c-sharp-forum.de/viewtopic.php?p=600205#600205]. Du musst statt Oledb deine MySql-Klassen verwenden und die Parameter so angeben, wie es MySql erwartet, siehe dazu
[Artikelserie] Parameter von SQL Befehlen [
http://www.mycsharp.de/wbb2/thread.php?threadid=66704] im 3. Beitrag.
Den Suchtext holst du einfach aus InputBox.Text (nämlich der TextBox, die in der Anwendung dafür vorgesehen ist). Dann kann der Anwender eingeben, was er will, auch Hochkommata und Gänsefüßchen und Backslash (also alles, was im C#-Code umständlich ist) - und du brauchst dich um nichts zu kümmern.
Gruß Jürgen
PS. Du siehst, vollständige Informationen sind immer sinnvoll. Da hier sowohl für Delphi als auch für C# geholfen wird und manche Unterforen zu beidem gehören, hast du hier auch (für dich) falsche Hinweise bekommen.
Mustermann - Fr 26.03.10 13:03
Nein habe ich nicht Jürgen. Danke für den Hinweis.
Mustermann - Fr 26.03.10 14:53
Danke für Eure hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!