Entwickler-Ecke
C# - Die Sprache - String zusammenbasteln
DennisXX - Fr 26.08.11 12:26
Titel: String zusammenbasteln
Hallo zusammen !
Ich will mir einen String zusammenbauen, dabei ist es wichtig, dass das erste Zeichen ein " ist. Es handelt sich um einen SQL Befehl. Kann mir jemand sagen, was ich hier falsch mache?
C#-Quelltext
1:
| String strCurrentSQLStatement = """ + strKindOfSQLCommand + " * FROM " + strDatabaseTable + ";"; |
Viele Grüße
Dennis
Horschdware - Fr 26.08.11 12:30
C#-Quelltext
1:
| String strCurrentSQLStatement = "\"" + strKindOfSQLCommand + " * FROM " + strDatabaseTable + ";"; |
Anführungszeichen escapen.
Wenn das an die DB gehen soll und du vorne ein Anführungszeichen aufmachst, wäre es evtl sinnvoll, das hinten irgendwo auch wieder zu schliessen, nicht?
DennisXX - Fr 26.08.11 13:35
Danke schön für die Hilfe !
stes - Fr 02.09.11 15:44
Horschdware hat folgendes geschrieben : |
C#-Quelltext 1:
| String strCurrentSQLStatement = "\"" + strKindOfSQLCommand + " * FROM " + strDatabaseTable + ";"; |
|
evtl als zusatzinfo (wenn hier auch relativ unbedenklich):
du arbeitest hier mit insgesamt 9 strings:
Zunächst fünf einzelne + die kombinationen: erst
" und
strKindOfSQLCommand, dann das ergebnis davon und
* FROM , dann das ergebnis davon und
strDatabaseTable, und das ergebnis davon und
; weißt du dann erst deiner Variablen zu. Das hängt damit zusammen das Strings unveränderlich sind und man nicht einfach weitere Zeichen anhängen kann.
Wenn du das in größerem Umfang machst, kannst du leichte bis große Performance-Probleme bekommen (wie gesagt, bei so einem Fall eher nicht).
Abhilfe würde ein StringBuilder schaffen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| StringBuilder s = new StringBuilder(); s.Append("\""); s.Append(strKindOfSQLCommand); s.Append(" * FROM "); s.Append(strDatabaseTable); s.Append(";"); String strCurrentSQLStatement = s.ToString(); |
Weitere Infos:
Guide to C#: Speicherverwaltung [
http://www.guidetocsharp.de/GarbageCollection.aspx];
Gruß
stes
Kha - Fr 02.09.11 16:18
Es tut mir ja leid, wenn ich schon wieder auf ihm herumhacke ;) , aber der Herr Roden erzählt mal wieder einen riesigen Schmarrn zusammen. Selbstverständlich erzeugt so ein Code einen einzelnen Aufruf von String.Concat, performanter geht es gar nicht. Aber wir sind uns doch hoffentlich alle einig, dass an dieser Codestelle die Performance komplett irrelevant und wenn schon keine Prepared Statements dann wenigstens String.Format eingesetzt werden sollte.
stes - Fr 02.09.11 16:23
| Zitat: |
| Aber wir sind uns doch hoffentlich alle einig, dass an dieser Codestelle die Performance komplett irrelevant [ist] [...] |
Ja, allerdings, wie auch im Beitrag erwähnt.
Aber danke für den Hinweis, mal wieder ein Beispiel dass man dem Internet nicht alles glauben darf (angenommen du hast Recht ;) )
Gruß
stes
Kha - Fr 02.09.11 16:26
stes hat folgendes geschrieben : |
| Aber danke für den Hinweis, mal wieder ein Beispiel dass man dem Internet nicht alles glauben darf (angenommen du hast Recht ;) ) |
Darfst du gern in ILSpy verifizieren ;) .
Th69 - Fr 02.09.11 18:43
Hallo Kha,
du bist mir zuvorgekommen ;-) Wollte gerade auch das mit String.Concat schreiben.
Jedoch sehe ich String.Format nicht als Alternative hierzu, da ja hier erst der Format-String geparst werden muß (wie "printf" in C). Nur wenn die Anordnung der Parameter anders sein könnte, benutze ich einen flexiblen Format-String (z.B. bei Localization).
Und an alle:
Der Übersichtlichkeit halber würde ich es bei diesen wenigen Strings auch bei den '+' lassen.
Nur wenn dynamisch Strings erzeugt werden, d.h. in einer Schleife, dann lohnt sich wirklich der StringBuilder.
Kha - Fr 02.09.11 20:34
Th69 hat folgendes geschrieben : |
| Jedoch sehe ich String.Format nicht als Alternative hierzu, da ja hier erst der Format-String geparst werden muß (wie "printf" in C). |
Oh, habe vergessen zu erwähnen, dass ich Format
der Lesbarkeit wegen empfehlen würde, da ich die Performance eben für irrelevant halte. Bei Leerzeichen im String bringt mich das sonst um den Verstand :D .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!