7

我有以下无法编译的字符串:

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

违规部分是:

""table"" =

""field"" = 

编译器在转义序列上搞混了。任何人都可以看到有什么问题吗?

4

7 回答 7

17

为了解决您的标题问题...

要在逐字字符串文字中转义引号,请使用引号转义序列""(即两个引号字符)

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

好吧,在您第一次引用结束之后,无论如何都不再使用 @ 符号,因此您可以自由使用转义字符。尝试将您的“表”包裹在“[”中,例如 [table] 和 [field],或者使用 \ 转义“”字符。

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
String formLookupPull = @"SELECT value1, '"+tableName+"', '"+columnName+"' FROM lkpLookups WHERE \"table\" = '" + tableName + "' and \"field\" = '" + columnName + "';";

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

于 2009-03-16T22:08:27.743 回答
1

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

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

未经测试,但我想你会明白的。

于 2009-03-16T22:14:54.577 回答