Escape-цитата в строке подключения web.config - PullRequest
76 голосов
/ 05 июля 2010

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

<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" />

Ответы [ 5 ]

95 голосов
/ 05 июля 2010

Используйте &quot; вместо " для выхода из него.

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

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

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

Обновление

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

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

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

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' работает.

48 голосов
/ 13 апреля 2012
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

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

2 голосов
/ 01 февраля 2013

, если <code>&quot; не работает, попробуйте <code>&#34;.

0 голосов
/ 17 мая 2018

Ответ Одедса почти завершен. Еще одна вещь, которую нужно добавить.

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

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

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'
0 голосов
/ 05 июля 2010

Используйте &quot; Это должно работать.

...