2010-09-29 23 views
39

estoy usando Entity Framework 4 para una aplicación sencilla y me gustaría hornear mis credenciales de conexión en la cadena de conexión:¿Cómo incluir ampersand en la cadena de conexión?

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

Sin embargo, la contraseña (que no puedo cambiar) contiene un símbolo de unión. ASP.NET lanza: Configuration Error: An error occurred while parsing EntityName. Line XX, position YYY.

Si puedo reemplazar el signo de la contraseña con &amp;, consigo un SqlException: Login failed for user 'myUser'. Por lo general, este truco funciona, pero supongo que algo está fallando, porque esto es técnicamente una cadena de conexión en el interior de una conexión cuerda.

¿Qué debo hacer aquí? La mayoría de mis clases incluyen un código como:

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

Actualización: Resulta que las credenciales que estoy usando son una cuenta de dominio, así que lo que realmente necesita es Integrated Security=True en la cadena de conexión en lugar de una contraseña.

Codificando el ampersand como se indica en la respuesta aceptada debería funcionar bien, aunque no lo he probado.

Respuesta

75

Tendrá que usar secuencias de escape como lo haría para cualquier documento XML, que son todos los archivos .config.

  • Ampersand = & = &amp;
  • Mayor que => = &gt;
  • menos de = < = &lt;
  • apóstrofe = '= &apos;
  • Cita = "= &quot;

También puede usar el CDATA etiqueta para que pueda utilizar estos caracteres no válidos

<![CDATA[ y termina con ]]>

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

Ya lo he intentado, como se señala en mi pregunta. Parece que la contraseña incorrecta se envía junto con Entity Framework. – user403830

+0

Eso realmente debería ser todo lo que necesita para que funcione. – hunter

+0

Además, intente iniciar sesión en la instancia de SQL Server utilizando las credenciales de su conexión fuera de su aplicación – hunter

0

…this is technically a connection string inside a connection string

¿Usted ha intentado escapar dos veces?

&amp;amp; 
Cuestiones relacionadas