2010-11-22 5 views
5

Ich habe eine SQL Server CE-Datenbank in einem Projekt, das ich irgendwo in dem% AppData% -Verzeichnis speichern möchte. Allerdings kann ich nicht einen Weg finden, einen Verweis auf die Anwendungsdatenpfad in der Verbindungszeichenfolge (in der App.Config)Wie Verwenden von Anwendungsdaten in einem (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> 

Bisher habe ich gelernt, dass:% APPDATA% nicht unterstützt wird und mit der Die Einstellungsklasse (wie vorgeschlagen) funktioniert auch nicht (die Einstellungsklasse wird nicht zum Zeitpunkt erstellt, zu dem die Ausnahme bereits ausgelöst wird).

Kann der Anwendungsdatenordner (oder ein anderer spezieller Ordner) in der Eigenschaft connectionString (in der App.Config) verwendet werden?

Hinweis: Es scheint, als ob ich nach einer Lösung suche, um die Verbindungszeichenfolge (im Code) so früh wie möglich zu ändern, anstatt eine native App.Config-Lösung.

Antwort

12

Verwenden Sie Ihre benutzerdefinierte Umgebungsvariable Unterstützung bauen:

Lassen Sie haben:

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

Das können Sie:

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

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

Weiter so, wie Sie mehrere Umgebungsvariablen unterstützen kann:

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 Nur hinzuzufügen - dieser Blog-Beitrag http://erikej.blogspot.com/2010/07/getting-started-with-sql-server-compact.html geht ziemlich viele Schritte durch, um mit CE zu beginnen – InSane

+0

nice one, thanks ! –

+0

Ich weiß nicht, warum Sie setzen || in |% AppData% | ? – nXqd

Verwandte Themen