Подтвердить что ты не робот

Как включить амперсанд в строку подключения?

Я использую 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=&quot;Data Source=localhost\DEV;Initial Catalog=MyDB;UserId=myUser;Password=jack&jill;MultipleActiveResultSets=True&quot;" 
         providerName="System.Data.EntityClient" />
</connectionStrings>

Однако пароль (который я не могу изменить) содержит амперсанд. ASP.NET выбрасывает: Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.

Если я заменю амперсанд в пароле &amp;, я получаю a SqlException: Login failed for user 'myUser'. Обычно этот трюк работает, но я предполагаю, что что-то не работает, потому что это технически строка соединения внутри строки подключения.

Что мне здесь делать? Большинство моих классов включают в себя код типа:

using (var context = new MyEntities()) {
   // do work
}

Обновление: Оказывается, учетные данные, которые я использую, являются учетной записью домена, поэтому мне действительно нужно Integrated Security=True в строке подключения, а не в пароле.

Кодирование амперсанда, как указано в принятом ответе, должно работать нормально, хотя я его не тестировал.

4b9b3361

Ответ 1

Вам нужно использовать escape-последовательности, как и для любого XML-документа, который есть все файлы .config.

  • Амперсанд = и = &amp;
  • Великий Than = >= &gt;
  • Меньше Than = <= &lt;
  • Apostrophe = '= &apos;
  • Цитата = "= &quot;

Вы также можете использовать тег CDATA, чтобы использовать эти незаконные символы

<![CDATA[ и заканчивается на ]]>

<connectionStrings>
    <add name="MyEntities" connectionString="
        metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;
        provider=System.Data.SqlClient;
        provider connection string=&quot;
        Data Source=localhost\DEV;
        Initial Catalog=MyDB;UserId=myUser;
        Password=<![CDATA[jack&jill]]>;
        MultipleActiveResultSets=True&quot;" 
        providerName="System.Data.EntityClient" />
</connectionStrings>

Ответ 2

... это технически строка соединения внутри строки подключения

Вы пытались дважды убежать?

&amp;amp;