2009-04-30 24 views
1

Ich schreibe eine Desktop-App, die eine einfache Persistence-Schicht benötigt - ich habe von SubSonic erfahren und kann mit SQLite arbeiten. Allerdings muss ich die Datenbankdatei im AppData-Ordner des Benutzers behalten und weiß nicht, wie man diesen Wert in app.config legt - ich möchte keine absoluten Pfade verwenden.SubSonic-Verbindungszeichenfolge für SQLite

Kann app.config irgendwie auf Umgebungsvariablen zugreifen oder Anwendungsdatenordner referenzieren?

Antwort

1

Es gibt keine Möglichkeit, den AppData-Ordner in der app.config für eine Verbindungszeichenfolge anzugeben.

Aber was Sie tun könnten, ist den Wert in die Konfigurationsdatei schreiben entweder während der Installation oder wenn die Anwendung zum ersten Mal ausgeführt wird.

+0

Konnten Sie ein Beispiel schreiben, wie man das macht? – dahpgjgamgan

+0

Sie können die Konfigurationsdatei mit der ConfigurationManager-Klasse lesen/schreiben. Beispiel: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/f26d0863-06be-45c1-b42d-e0816dc9eb58/ MSDN-Dokumentation: http://msdn.microsoft.com /en-us/library/system.configuration.configurationmanager.aspx –

0

Der „Rahmen Weg“ appdata finden ist Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData)

Diese finden den richtigen Weg appdata unabhängig von der Plattform zu verwenden.

0

Es gibt mehrere Möglichkeiten, wenn Sie ASP.NET verwenden, in beiden Sprachen

Server.MapPath („~“) wird die Wurzel der Anwendung als vollständigen Pfadnamen zurückkehren, dann können Sie einfach hinzufügen „/ app_data "dazu, um den vollen Pfad zu erhalten.

Alternativ prüfen die HttpContext.Current.Request und HttpContext.Current.Application gibt es zahlreiche (und viel besser als die eben erwähnten I) Eigenschaften, die Sie mit dem gleichen Ordner bieten wird - ist die Wurzel der Anwendung als s voller Pfad.

Beachten Sie, dass diese sollen alle arbeiten, auch wenn Sie die Anwendung als virtuelle Ordner und einen normalen Ordner mit einer Anwendung haben konfiguriert in IIS auf diesem Ordner

jedoch diese nur zur Laufzeit möglich ist, so kann es nicht wirklich in der app.config erwähnt werden. Sie könnten versuchen, relative Pfade zu verwenden, von denen app.config residentes IE "../App_Data" oder "/ App_data" ist, aber ich bin mir nicht sicher, ob Sie genaue Anforderungen haben.

Viel Glück

2

Für Unterschall v2.x würde ich die app.config Verbindungszeichenfolge ignorieren und es nur zur Laufzeit einstellen, bevor Sie mit der Datenbank arbeiten. Der Providername bleibt natürlich gleich.

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyApplication\Northwind.db3"); 

DataService.Providers["Northwind"].DefaultConnectionString = 
      String.Format(@"Data Source={0};Version=3;New=False;Connection Timeout=3", dbPath); 
+0

Siehe auch http://stackoverflow.com/questions/2079781/how-can-i-tell-subsonic-2-to-use-a-different-config -Datei – Rory