C# Anführungszeichen innerhalb von Filterexpessions

Registriert
Mai 2007
Beiträge
150
Hey Leute,

ich habe folgenden Code:

Code:
datatable.Select("(Titel LIKE '*" + text + "*' OR Album LIKE '*" + text + "*' OR Artist LIKE '*" + text + "*') AND Artist LIKE '" + tree_view.SelectedNode.Text + "'");

Das problem ist nun, das sowohl text, als auch tree_view.SelectedNode.Text einfache Anführungszeichen enthalten können und dann die Syntax zerstören. Das hier habe ich schon versucht:

Code:
text = text.replace("'", "\\'");

Hab aber nicht geholfen. Hat noch jemand eine Idee?

lg Stefan
 
wenn du aus text einfach nur die ' entfernen möchtes, kannst du doch einfach
Code:
text.replace("'", "");

machen und diese entfernen, oder müssen die im Text enthalten sein?
 
Hallo, einfaches entfernen reicht nicht aus, es ist wichtig, das der Text 1 zu 1 erhalten bleibt.

text = text.replace("'", "\'"); bringt leider garnichts....
 
Zuletzt bearbeitet:
Willst du die einfachen Anführungszeichen als Zeichen im Text lassen, oder willst du die loswerden?
 
Das Slash brauch ja auch nen Escape-Slash, also:

text = text.replace("'", "\\\'");
 
Hätte eigentlich auch auf:
text = text.replace("'", "\\'");
getippt

Probier das einfach mal mit zwischen 1 und 5 Backslashes durch, irgendeines dürfte gehen^^
Denke 3 müssten dann passen.

Garnicht so einfach sich sowas zu denken^^
Der erste Slash escaped den zweiten Slash. Und der dritte Slash escaped dann das Hochkommata.
Dann kommt also am Ende:
\'
raus.
D.h. das Hochkommata wird im String nochmals escaped und dürfte wieder stimmen
 
Zuletzt bearbeitet:
Hm normal müsste das schon gehen...
Kannst du irgendwie mal alles unnötige auskommentieren oder mal ein eigene Testprogramm machen?
Dann könntest du dort mal alles fest hinterlegen bis auf eine Variable. Dort kannst du dann probieren wieviele Backslashes du brauchst :)
Hatte das heute auch wieder auf der Arbeit, dass es wegen Backslashes nicht ging (6 Stück waren nötig^^)
 
Einfach statt einem Hochkomma zwei Hochkomma benutzen. Dann geht es.
also:
"'Kuckuck'".Replace("'","''");
 
wie findest denn folgende Syntax:

Code:
datatable.Select(string.Format(@"(Titel LIKE '*{0}*' OR Album LIKE '*{0}*' OR Artist LIKE '*{0}*') AND Artist LIKE '{1}'",text,tree_view.SelectedNode.Text));

kein maskieren wegen dem @-Zeichen nötig. Durch string.Format sparst dir das Verketten mit + Zeichen.
Finde ich persönlich übersichtlicher.
 
Zurück
Oben