Autor |
Beitrag |
DennisXX
      
Beiträge: 133
|
Verfasst: Fr 26.08.11 12:26
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
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: 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?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
DennisXX 
      
Beiträge: 133
|
Verfasst: Fr 26.08.11 13:35
Danke schön für die Hilfe !
|
|
stes
      
Beiträge: 36
Erhaltene Danke: 6
Win 95, Win XP, Win 7 64-bit
C# (VS 2010, #Develop), Java (eclipse)
|
Verfasst: 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;
Gruß
stes
_________________ "Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann." Joseph Weizenbaum
Für diesen Beitrag haben gedankt: storestore
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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
      
Beiträge: 36
Erhaltene Danke: 6
Win 95, Win XP, Win 7 64-bit
C# (VS 2010, #Develop), Java (eclipse)
|
Verfasst: 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
_________________ "Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann." Joseph Weizenbaum
Für diesen Beitrag haben gedankt: storestore
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 02.09.11 16:26
|
|
Th69
      

Beiträge: 4799
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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  .
_________________ >λ=
|
|
pdelvo
      
Beiträge: 55
Erhaltene Danke: 11
|
Verfasst: Fr 02.09.11 21:47
|
|