转义逐字字符串文字

我有以下不会编译的字符串:

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

违规部分是:

 ""table"" = 

 ""field"" = 

编译器在转义序列上混淆了一切。 任何人都可以看到什么是错的?

问题是,并非所有串联的字符串都是逐字字符串文字,只有连接的第一部分是。

换一种说法,

 @"SELECT value1, '" 

是构建最终字符串的整个语句中唯一的逐字文字。

您需要在其余字符串前面添加@以使它们全部逐字。

这将使它看起来像:

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

解决你的标题问题……

要在逐字字符串文字中转义引号,请使用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) 

你想用\"来逃避引号,而不是""

像这样:

 .. 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]中,或者用“\”转义“字符”。

 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 + "';"; 

我也相信你在构建这个查询之前正确地转义这些变量:)

你为什么引用列的文字名称,对我来说似乎没用。

“SELECT value1,”+ tableName +“,”+ columnName +“FROM lkpLookups WHERE table =’”+ tableName +“’and field =’”= columnName +“’;”;

没有经过测试,但我认为你会得到这个想法。