Как включить амперсанд в строку подключения?
Я использую Entity Framework 4 для простого приложения и хотел бы испечь мои учетные данные подключения в следующей строке подключения:
<connectionStrings>
<add name="MyEntities"
connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost\DEV;Initial Catalog=MyDB;UserId=myUser;Password=jack&jill;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
</connectionStrings>
Однако пароль (который я не могу изменить) содержит амперсанд. ASP.NET выбрасывает:
Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.
Если я заменю амперсанд в пароле &
, я получаю a SqlException: Login failed for user 'myUser'.
Обычно этот трюк работает, но я предполагаю, что что-то не работает, потому что это технически строка соединения внутри строки подключения.
Что мне здесь делать? Большинство моих классов включают в себя код типа:
using (var context = new MyEntities()) {
// do work
}
Обновление: Оказывается, учетные данные, которые я использую, являются учетной записью домена, поэтому мне действительно нужно Integrated Security=True
в строке подключения, а не в пароле.
Кодирование амперсанда, как указано в принятом ответе, должно работать нормально, хотя я его не тестировал.
Ответы
Ответ 1
Вам нужно использовать escape-последовательности, как и для любого XML-документа, который есть все файлы .config.
- Амперсанд = и =
&
- Великий Than = >=
>
- Меньше Than = <=
<
- Apostrophe = '=
'
- Цитата = "=
"
Вы также можете использовать тег CDATA
, чтобы использовать эти незаконные символы
<![CDATA[
и заканчивается на ]]>
<connectionStrings>
<add name="MyEntities" connectionString="
metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;
provider=System.Data.SqlClient;
provider connection string="
Data Source=localhost\DEV;
Initial Catalog=MyDB;UserId=myUser;
Password=<![CDATA[jack&jill]]>;
MultipleActiveResultSets=True""
providerName="System.Data.EntityClient" />
</connectionStrings>
Ответ 2
... это технически строка соединения внутри строки подключения
Вы пытались дважды убежать?
&amp;