簡體   English   中英

Escaping 逐字字符串文字

[英]Escaping verbatim string literals

我有以下無法編譯的字符串:

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

違規的部分是:

""table"" =

""field"" = 

編譯器在轉義序列上搞混了。 任何人都可以看到有什么問題嗎?

為了解決您的標題問題...

要在逐字字符串文字中轉義引號,請使用引號轉義序列"" (即兩個引號字符)

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

有關 escaping 等的更多詳細信息,請參閱MSDN

請注意,在您發布的代碼中,唯一的逐字字符串是第一個字符串(前面有@ )。 隨后的字符串不是逐字記錄的,因此正確的轉義序列應該是\"

您可以使用string.Format使它看起來更漂亮:

String formLookupPull = 
   string.Format(@"SELECT value1, '{0}', '{1}' FROM lkpLookups" +
                 @"WHERE ""table"" = '{0}' and ""field"" = '{1}';", 
                 tableName, columnName)

問題在於,並非您要連接的所有字符串都是逐字字符串文字,只有連接的第一部分是。

換句話說,

@"SELECT value1, '"

是整個語句中用於構建最終字符串的唯一逐字文字。

您需要在字符串的 rest 前面添加 @ 以使它們全部逐字記錄。

這將使它看起來像:

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

您想使用\"來轉義引號,而不是""

像這樣:

.. 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.";

好吧,在您第一次引用結束之后,無論如何都不再使用 @ 符號,因此您可以自由使用轉義字符。 嘗試將您的“表”包裹在“[”中,例如 [table] 和 [field] 或 escaping 將“字符與 \.

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

如果您不能使用 SQL 參數,則 String.Format 可能比純“+ 連接”更清晰易讀。

string formLookupPull = 
  string.Format(@"SELECT value1, '{0}', '{1}' 
                       FROM lkpLookups 
                   WHERE ""table"" = '{0}' AND ""field"" = '{1}';",
                tableName, columnName);
String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE \"table\" = '" + tableName + "' and \"field\" = '" + columnName + "';";

我也相信你是 escaping 這些變量在構建此查詢之前正確:)

你為什么引用列的字面名稱,對我來說似乎沒有必要。

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

未經測試,但我想你會明白的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM