Autor Beitrag
DennisXX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: 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?

ausblenden C#-Quelltext
1:
String strCurrentSQLStatement = """ + strKindOfSQLCommand + " * FROM " + strDatabaseTable + ";";					


Viele Grüße
Dennis
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Fr 26.08.11 12:30 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Fr 26.08.11 13:35 
Danke schön für die Hilfe !
stes
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 36
Erhaltene Danke: 6

Win 95, Win XP, Win 7 64-bit
C# (VS 2010, #Develop), Java (eclipse)
BeitragVerfasst: Fr 02.09.11 15:44 
user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 36
Erhaltene Danke: 6

Win 95, Win XP, Win 7 64-bit
C# (VS 2010, #Develop), Java (eclipse)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 02.09.11 16:26 
user profile iconstes hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 02.09.11 20:34 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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 .

_________________
>λ=
pdelvo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 55
Erhaltene Danke: 11



BeitragVerfasst: Fr 02.09.11 21:47 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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 .


Da fällt mir ein Zitat zu ein

Zitat:
premature optimization is the root of all evil