2010-11-22 11 views
5

Tengo una base de datos SQL Server CE en un proyecto que deseo almacenar en algún lugar del directorio% AppData%. Sin embargo no puedo encontrar una manera de hacer una referencia a la ruta de datos de aplicación en la cadena de conexión (en el app.config)Cómo utilizar los datos de la aplicación en un (App.config) connectionString

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    </configSections> 
    <connectionStrings> 
    <add name="EntityConnectionString" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=|ApplicationData|\Entities.sdf&quot;" providerName="System.Data.EntityClient"/> 
    </connectionStrings> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> 
</configuration> 

Hasta ahora he aprendido que:% APPDATA% no es compatible y utilizar el la clase de configuración (como sugerida) tampoco funcionará (la clase de configuración no está construida en el momento en que la excepción ya se lanzó).

¿Es posible utilizar la carpeta de datos de la aplicación (u otra carpeta especial) en la propiedad connectionString (en la App.Config)?

Nota: parece que estoy buscando una solución para modificar la cadena de conexión (en el código) tan pronto como sea posible en lugar de una solución App.Config nativa.

Respuesta

12

Use su generación personalizada entorno de soporte variables:

Que tiene:

<connectionStrings> 
    <add name="My" connectionString="..;Data Source=|%AppData%|\Entities.sdf;.." /> 
</connectionStrings> 

El que puede utilizar:

using System.Configuration; // requires reference to System.Configuration.dll 

ConfigurationManager.ConnectionStrings["EntityConnectionString"].ConnectionString.Replace("%AppData%", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

siguiente manera puede apoyar varias variables de entorno:

var vars = new Dictionary<string, string> 
{ 
    { "%AppData%", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), 
    { "%Temp%", Environment.GetFolderPath(SpecialFolder.Temp) }, 
    // etc.. 
    { "%YourNonStandardVar", "YourNonStandartPath" } 
}; 

var result = ConfigurationManager.ConnectionStrings["YourString"].ConnectionString 
foreach (var v in vars) 
    result = result.Replace(v.Key, v.Value); 
+1

+1 Just para agregar - esta publicación de blog http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html describe todos los pasos para comenzar con CE – InSane

+0

nice one, gracias ! –

+0

No sé por qué pones || en |% AppData% | ? – nXqd

Cuestiones relacionadas