2010-11-22 19 views
5

J'ai une base de données SQL Server CE dans un projet que je ne veux pas stocker quelque part dans le répertoire% AppData%. Cependant, je ne peux pas trouver un moyen de faire une référence au chemin de données d'application dans la chaîne de connexion (dans le App.Config)Comment utiliser les données d'application dans 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> 

Jusqu'à présent, j'appris que:% APPDATA% est pas pris en charge et en utilisant la La classe settings (comme suggéré) ne fonctionnera pas non plus (la classe settings n'est pas construite au moment où l'exception est déjà levée).

Est-il possible d'utiliser le dossier de données de l'application (ou un autre dossier spécial) dans la propriété connectionString (dans App.Config)?

Remarque: il semble que je cherche une solution pour modifier la chaîne de connexion (dans le code) le plus tôt possible plutôt qu'une solution native App.Config.

Répondre

12

Utilisez votre génération personnalisée soutien variable d'environnement:

Laissez-vous:

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

Le vous pouvez utiliser:

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

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

façon suivante vous pouvez prendre en charge plusieurs variables d'environnement:

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 Juste ajouter - ce blog http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html à peu près toutes les étapes pour commencer avec CE – InSane

+0

nice, merci ! –

+0

Je ne sais pas pourquoi vous mettez || dans |% AppData% | ? – nXqd