Экранирующая кавычка в строке подключения web.config


88

В моей веб-конфигурации есть строка подключения:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass"word" providerName="System.Data.SqlClient" />

Как видите, в пароле есть знак кавычки (") (полученный из другого отдела. Я не могу изменить этот пароль пользователя базы данных).

Как мне избежать кавычек в этой строке подключения?

Кстати: я уже пробовал & quot; в строке. Это не сработало - после этого у ado.net возникло исключение ArgumenException: «Формат строки инициализации не соответствует спецификации, начиная с индекса 57». 57 - это место, где & quot; находится в моей строке подключения. Я также пробовал заключить часть пароля в '- тоже не сработало.

Также пробовал "" и \ "- тогда web.config не может быть проанализирован.

Спасибо за решение:

Мне пришлось объединить экранирование двойной кавычки и заключить пароль в одинарные кавычки:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'" providerName="System.Data.SqlClient" />

Ответы:


109

Используйте &quot;вместо, "чтобы избежать этого.

web.config - это файл XML, поэтому вам следует использовать экранирование XML.

connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

См. Эту ветку форума.

Обновление :

&quot;должно работать, но, поскольку это не так, пробовали ли вы некоторые другие escape-последовательности строк для .NET? \"и ""?

Обновление 2:

Попробуйте использовать одинарные кавычки для connectionString:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass"word'

Или:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word'

Обновление 3:

Из MSDN (свойство SqlConnection.ConnectionString):

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

Так:

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

Проблема не в web.config, а в формате строки подключения. В строке подключения, если у вас есть "значение (пары ключ-значение), вам необходимо заключить значение в '. Итак, пока Password=somepass"wordне работает, Password='somepass"word'работает.


Это не работает. Очевидно, это сработало бы, если бы оно было в простом xml, но не в значении атрибута.
Себастьян П.Р. Гингтер 05

@Sebastian PR Gingter - странно, что это не работает. Вы пробовали другие escape-последовательности?
Oded

Да. Весь Web.config не может быть проанализирован при использовании "" и \ "." Не заменяется на "внутри строки, и строка запроса не может быть проанализирована, что приводит к указанной ошибке. Если бы это было так просто, я бы не спросил здесь ;-)
Себастьян PR Gingter 05

1
@Sebastian PR Gingter - здесь люди не могут догадаться, что вы пробовали и что знаете. Вы должны включить такие детали в свой вопрос (как сейчас).
Oded

Какую кодировку использует ваш web.config?
Мэтью Эбботт

62
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Поскольку web.config - это XML, вам нужно экранировать пять специальных символов:

&amp;-> & амперсанд, U + 0026
&lt; -> < левая угловая скобка, знак «меньше», U + 003C
&gt; -> > правая угловая скобка, знак «больше», U + 003E
&quot; -> " кавычка, U + 0022
&apos; -> ' апостроф, U + 0027

+ , я полагаю, не проблема.


Дык Филан добавляет: Вы также должны заключить свой пароль в одинарные кавычки ':

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

Для меня это был амперсанд в пароле, хранящемся в web.config. Очевидно, и в то же время довольно неочевидно для отслеживания. Ошибка, которую выдает веб-сайт Azure, когда это имеет место в файле web.config: «Страница не может быть отображена из-за внутренней ошибки сервера». В журналы ошибок тоже ничего не записывает. Спасибо OP за вопрос и вам за напоминание.
Тимоти Ли Рассел

А как насчет квадратных скобок? ([])
Dzianis Yafimau

А ;характер?
Kiquenet


1

Ответ Одедса почти завершен. Еще кое-что добавлю.

  1. Избегайте специальных символов xml, как сказал Эмануэле Греко.
  2. Поместите пароль в одинарные кавычки, как сказал Одед
  3. (это новый) Избегайте одиночных тиков с помощью другого одиночного тика ( ref )

имея этот пароль = "'; это должна быть допустимая строка подключения:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'

Я думаю, ты имеешь ввиду password='''';действителен. Но ваше предложение - единственное, что у меня сработало. Это фактически используется и в других схемах побега.
Bluebaron

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.