Escaping im Verbatim String-Literale

7

Ich habe die folgende Zeichenfolge, die nicht kompiliert wird:

%Vor%

Die beleidigenden Abschnitte sind:

%Vor%

und

%Vor%

Der Compiler wird in der Escape-Sequenz durcheinander gebracht. Kann jemand sehen, was falsch ist?

    
Brian Sweeney 16.03.2009, 22:04
quelle

7 Antworten

6

Das Problem besteht darin, dass nicht alle Zeichenketten, die Sie verketten, verbatim Zeichenkettenliterale sind, sondern nur der erste Teil der Verkettung.

Mit anderen Worten

%Vor%

ist das einzige wort Literal in der gesamten Anweisung, um die letzte Zeichenfolge zu erstellen.

Sie müssten @ vor den Rest Ihrer Strings einfügen, um sie alle wörtlich zu machen.

Wie würde es aussehen:

%Vor%     
Quintin Robinson 16.03.2009, 22:12
quelle
17

Um Ihre Titelfrage anzusprechen ...

Verwenden Sie die quote-escape-Sequenz "" (das sind zwei Anführungszeichen)

, um das Zitat in einem wortgetreuen String-Literal zu umgehen %Vor%

Siehe MSDN für weitere Details zum Escaping usw.

Beachten Sie, dass in Ihrem geposteten Code die einzige wörtliche Zeichenfolge die erste ist (mit dem @ davor). Die nachfolgenden Strings sind nicht wortgetreu, also wäre die richtige Escapesequenz \" .

Sie können es mit string.Format :

schöner aussehen lassen %Vor%     
Daniel LeCheminant 16.03.2009 22:10
quelle
5

Sie möchten \" verwenden, um Anführungszeichen zu umgehen, nicht "" .

So:

%Vor%

Bearbeiten:

Weitere Erklärung:

Sie haben nur @ auf der ersten aller Zeichenfolgen, die Sie verketten. In Literalstrings (mit einem @ davor) können Sie Anführungszeichen mit einem doppelten Anführungszeichen umgehen. In normalen Strings ist es ein Schrägstrich-Zitat.

ZB

%Vor%     
Blorgbeard 16.03.2009 22:08
quelle
4

Nach dem ersten Ende des Zitats wird das @ -Symbol nicht mehr verwendet, sodass Sie das Escape-Zeichen verwenden können. Versuchen Sie, Ihre "Tabelle" in "[" wie [Tabelle] und [Feld] einzufügen oder das Zeichen mit einem \ zu umgehen.

%Vor%     
Kelsey 16.03.2009 22:10
quelle
4

Wenn Sie keine SQL-Parameter verwenden können, kann String.Format etwas sauberer und lesbarer sein als reine "+ Verkettung".

%Vor%     
CMS 16.03.2009 22:11
quelle
1
%Vor%

Ich vertraue auch darauf, dass Sie diese Variablen vor dem Erstellen dieser Abfrage korrekt umgehen:)

    
MattJ 16.03.2009 22:08
quelle
1

Warum zitieren Sie die wörtlichen Namen der Spalten, die mir unnötig erscheinen?

"SELECT value1," + Tabellenname + "," + Spaltenname + "FROM lkpLookups WHERE Tabelle = '" + Tabellenname + "' und Feld = '" = Spaltenname + "';";

Nicht getestet, aber ich denke, Sie werden die Idee bekommen.

    
david cameron 16.03.2009 22:14
quelle