Как включить амперсанд в строку подключения? - PullRequest
54 голосов
/ 29 сентября 2010

Я использую 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;, я получу SqlException: Login failed for user 'myUser'. Обычно этот трюк работает, но я предполагаю, что что-то не получается, потому что это технически строка подключения внутри строки подключения. *

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

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

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

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

1 Ответ

89 голосов
/ 29 сентября 2010

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

  • Амперсанд = & = &amp;
  • Больше чем => = &gt;
  • меньше чем = <= <code>&lt;
  • Апостроф = '= &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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...