Как бороться с кавычками в кавычках в C #? - PullRequest
10 голосов
/ 25 февраля 2011

Основной вопрос:
Есть ли способ вставить ONE двойные кавычки в строку в C #

Информация:
Я пытаюсь выполнить что-то вроде следующего оператора SQL Select в C #

SELECT Name FROM Production.Product
WHERE CONTAINS(Name, '"chain*"');  

Я интерпретировал это следующим образом:

string selectCommand= @"select Name from Production.Products  
WHERE contains (Name,'\"" + chain+ "*\"')");

Но я получаю строку как:

"ГДЕ содержит (Имя, '\" цепочка \ "')"

Я также попробовал способ в этом вопросе SOF , но он тоже не сработал !:

string selectCommand= @"select Name from Production.Products  
where contains (doc.document_name,'"""""" + full + """"""')");

Ответы [ 5 ]

8 голосов
/ 25 февраля 2011

Если вы посмотрите документацию для строковых литералов , вы обнаружите, что существует два формата.Обычный формат, в котором вы должны экранировать все следующие символы:

', ", \, 0, a, b, f, n, r, t, u, U, x, v.

Таким образом, ваша строка должна быть записана следующим образом:

string query = "WHERE CONTAINS(Name, \'\"chain*\"\');";

или дословными литералами, которым предшествует 'в «символе», где вы можете избежать двойных кавычек, «удвоив»:

string query = @"WHERE CONTAINS(Name, '""chain*""');";

Так что просто отбросьте «@» из вашей строки, и она будет работать.

7 голосов
/ 25 февраля 2011

Это потому что у вас есть @ в начале вашей строки

string selectCommand= "select Name from Production.Products where contains (doc.document_name,\'\"" + full + "*\"\');";

Вам в основном нужно убежать от ' и "

1 голос
/ 25 февраля 2011

Просто опустите @ в начале строки, и она должна работать.

Причина, по которой обратная косая черта сохраняется в вашей строке, заключается в том, что вы указали строке не заменять экранированные последовательности символов, поместив @ перед строкой. Удаление @ позволит вашим сбежавшим символам, ну, в общем, сбежать.

0 голосов
/ 25 февраля 2011

"@" здесь вам не поможет. Удалите его, и у вас все будет хорошо. Это должно работать:

Console.WriteLine("...(doc.document_name,'\"" + full + "*\"')");

Если вы действительно хотите оставить «@», попробуйте следующее:

Console.WriteLine(@"...(doc.document_name,'""" + full + "*\"')");

0 голосов
/ 25 февраля 2011

Примерно так:

string full = "abc";
string selectCommand= @"select Name from Production.Products where contains (doc.document_name,'""" + full + "*\"')";
...