web-dev-qa-db-fra.com

Comment inclure l'esperluette dans la chaîne de connexion?

J'utilise Entity Framework 4 pour une application simple et je voudrais créer mes informations d'identification de connexion dans la chaîne de connexion suivante:

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

Cependant, le mot de passe (que je ne peux pas changer) contient une esperluette. ASP.NET lance: Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.

Si je remplace l'esperluette dans le mot de passe par &amp;, J'ai un SqlException: Login failed for user 'myUser'. Habituellement, cette astuce fonctionne, mais je suppose que quelque chose échoue car il s'agit techniquement d'une chaîne de connexion à l'intérieur d'une chaîne de connexion.

Que dois-je faire ici? La plupart de mes cours incluent du code comme:

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

pdate: Il s'avère que les informations d'identification que j'utilise sont un compte de domaine, donc ce dont j'ai vraiment besoin est Integrated Security=True dans la chaîne de connexion plutôt qu'un mot de passe.

L'encodage de l'esperluette comme indiqué dans la réponse acceptée devrait fonctionner correctement, même si je ne l'ai pas testé.

54
user403830

Vous devrez utiliser des séquences d'échappement comme vous le feriez pour tout document XML, à savoir tous les fichiers .config.

  • Esperluette = & = &amp;
  • Supérieur à => = &gt;
  • Inférieur à = <= &lt;
  • Apostrophe = '= &apos;
  • Citation = "= &quot;

Vous pouvez également utiliser la balise CDATA pour pouvoir utiliser ces caractères illégaux

<![CDATA[ et se termine par ]]>

<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>
91
hunter