[英]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.