구두 문자 리터럴을 탈출합니다
-
19-08-2019 - |
문제
컴파일하지 않는 다음 문자열이 있습니다.
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 + @"';";
다른 팁
제목 질문을 해결하려면 ...
구두 문자 문자 그대로 인용문을 피하려면 인용문을 사용하십시오. ""
(두 인용 문자입니다)
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\" = '" ..
편집하다:
추가 설명 :
당신은 단지 만 있습니다 @
모든 문자열의 첫 번째로 당신은 연결하고 있습니다. 문자 그대로 (an @
앞쪽) 당신은 이중 인용문으로 따옴표를 탈출합니다. 정상적인 문자열에서는 슬래시 쿼트입니다.
예를 들어.
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.";
첫 번째 인용문 후에, @ 기호는 더 이상 사용되지 않으므로 탈출 문자를 자유롭게 사용할 수 있습니다. "테이블"에 래핑 한 [테이블] 및 [필드]에 래핑하거나"캐릭터를 a 로 탈출하십시오.
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 + "';";
또한이 쿼리를 구축하기 전에이 변수를 올바르게 탈출하고 있다고 믿습니다 :)
왜 열의 문자 이름을 인용 하는가?
"value1," + tablename + "," + columnname + "a table = ' + tablename +"'및 field = ' "= columnname +"'; ";
테스트되지 않았지만 아이디어를 얻을 것이라고 생각합니다.