我有以下不会编译的字符串:
String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE ""table"" = '" + tableName + "' and ""field"" = '" + columnName + "';";
违规部分是:
""table"" =
和
""field"" =
编译器在转义序列上混淆了一切。任何人都可以看到什么是错的吗?
答案 0 :(得分:17)
解决你的标题问题......
要在逐字字符串文字中转义引号,请使用quote-escape-sequence ""
(这是两个引号字符)
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)
答案 1 :(得分:6)
问题在于,并非您连接的所有字符串都是 verbatim 字符串文字,只有连接的第一部分是。
换句话说,
@"SELECT value1, '"
是构建最终字符串的整个语句中唯一 verbatim 文字。
您需要在字符串的其余部分前面添加@才能将它们全部逐字地添加。
这会使它看起来像:
String formLookupPull = @"SELECT value1, '"+tableName+ @"', '"+columnName+ @"' FROM lkpLookups WHERE ""table"" = '" + tableName + @"' and ""field"" = '" + columnName + @"';";
答案 2 :(得分: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.";
答案 3 :(得分:4)
在你的第一个引用结束后,@符号不再被使用,所以你可以自由使用转义字符。尝试将“表格”包裹在'[',如[table]和[field]中,或者用“\”转义“字符”。
String formLookupPull = @"SELECT value1, '" + tableName + "', '" + columnName + "' FROM lkpLookups WHERE [table] = '" + tableName + "' and [field] = '" + columnName + "';";
答案 4 :(得分:4)
如果你不能使用SQL参数,String.Format可以比纯粹的“+连接”更清晰和可读。
string formLookupPull =
string.Format(@"SELECT value1, '{0}', '{1}'
FROM lkpLookups
WHERE ""table"" = '{0}' AND ""field"" = '{1}';",
tableName, columnName);
答案 5 :(得分:1)
String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE \"table\" = '" + tableName + "' and \"field\" = '" + columnName + "';";
我还相信你在构建这个查询之前正确地转义了这些变量:)
答案 6 :(得分:1)
为什么要引用列的文字名称,对我来说似乎没用。
“SELECT value1,”+ tableName +“,”+ columnName +“FROM lkpLookups WHERE table ='”+ tableName +“'and field ='”= columnName +“';”;
未经测试,但我认为您会明白这一点。