7

コンパイルできない次の文字列があります。

String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE ""table"" = '" + tableName + "' and ""field"" = '" + columnName + "';";

問題のあるセクションは次のとおりです。

""table"" =

""field"" = 

コンパイラは、エスケープ シーケンスで完全に混乱しています。誰が何が悪いのか見ることができますか?

4

7 に答える 7

17

タイトルの質問に対処するには...

逐語的な文字列リテラルで引用符をエスケープするには、quote-escape-sequence ""(2つの引用符文字)を使用します

string a = @"He said ""Hi!""..."; // He said "Hi!"...

エスケープなどの詳細については、MSDNを参照してください。

投稿されたコードでは、逐語的な文字列は最初の文字列(@前の文字列)のみであることに注意してください。後続の文字列は逐語的ではないため、適切なエスケープシーケンスは。になります\"

あなたはそれをより美しく見せることができますstring.Format

String formLookupPull = 
   string.Format(@"SELECT value1, '{0}', '{1}' FROM lkpLookups" +
                 @"WHERE ""table"" = '{0}' and ""field"" = '{1}';", 
                 tableName, columnName)
于 2009-03-16T22:10:50.857 に答える
6

問題は、連結しているすべての文字列が逐語的な文字列リテラルであるとは限らず、連結の最初の部分だけがそうであることです。

言い換えると、

@"SELECT value1, '"

は、ステートメント全体で最後の文字列を作成するための唯一の逐語的リテラルです。

すべてを逐語的にするには、残りの文字列の前に@を追加する必要があります。

これは次のようになります:

String formLookupPull = @"SELECT value1, '"+tableName+ @"', '"+columnName+ @"' FROM lkpLookups WHERE ""table"" = '" + tableName + @"' and ""field"" = '" + columnName + @"';";
于 2009-03-16T22:12:57.420 に答える
5

\"ではなく、引用符をエスケープするために使用します""

このような:

.. FROM lkpLookups WHERE \"table\" = '" ..

編集:

さらなる説明:

@連結しているすべての文字列の最初にしかありません。リテラル文字列 (@前に がある) では、引用符を二重引用符でエスケープします。通常の文字列では、スラッシュ引用符です。

例えば。

string s = @"this is a literal string with ""quotes"" in it, " 
         +  "and this is a normal string with \"quotes\" in it";

string t = @"two literal strings" + @", concatenated together.";
于 2009-03-16T22:08:10.707 に答える
4

引用符の最初の終わりの後、@記号は使用されなくなったため、エスケープ文字を自由に使用できます。[テーブル]や[フィールド]のように「テーブル」を「[」で囲むか、「」文字を\でエスケープしてみてください。

String formLookupPull = @"SELECT value1, '" + tableName + "', '" + columnName + "' FROM lkpLookups WHERE [table] = '" + tableName + "' and [field] = '" + columnName + "';";
于 2009-03-16T22:10:09.983 に答える
4

SQLパラメータを使用できない場合、String.Formatは、純粋な「+連結」よりも少しわかりやすく読みやすくなります。

string formLookupPull = 
  string.Format(@"SELECT value1, '{0}', '{1}' 
                       FROM lkpLookups 
                   WHERE ""table"" = '{0}' AND ""field"" = '{1}';",
                tableName, columnName);
于 2009-03-16T22:11:40.777 に答える
1

なぜ列の文字通りの名前を引用するのですか、私には不要のようです。

"SELECT value1、" + tableName + "、" + columnName + "FROM lkpLookups WHERE table ='" + tableName + "'and field ='" = columnName + "';";

テストされていませんが、私はあなたがアイデアを得ると思います。

于 2009-03-16T22:14:54.577 に答える
1
String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE \"table\" = '" + tableName + "' and \"field\" = '" + columnName + "';";

また、このクエリを作成する前に、これらの変数を正しくエスケープしていると信じています:)

于 2009-03-16T22:08:27.743 に答える