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 user profile iconNarses: Topic aus Programmierwerkzeuge verschoben am Fr 26.03.2010 um 12:03
Moderiert von user profile iconNarses: 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);
  // suchen per Sql
  s := 'Select ... from ... where ... like %''%';
  showmessage(s);
  // suchen im String
  if (pos('''', s) > 0then
   showmessage('Hochkomma enthalten');
  // ersetzen des ' durch ein \
  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);


Marc. - Fr 26.03.10 12:45

Weshalb escapsed Du den String nicht Serverseitig mit MYSQL_REAL_ESCAPE_STRING() [http://php.net/manual/en/function.mysql-real-escape-string.php]? :)


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!