% APPDATA% in der Verbindungszeichenfolge ersetzt den eigentlichen Ordner nicht?

8

Wenn ich WPF und Entity-Framework verwende, habe ich eine APP.CONFIG, die wie folgt aussieht:

%Vor%

Bei Verwendung dieses Codes wird immer der folgende Fehler ausgegeben:

%Vor%

Wenn ich den Pfad "% APPDATA% \ Folder \ Database.sdf" von der Eingabeaufforderung aus ausführen, funktioniert es gut, und wenn ich "% APPDATA%" und "hardcode" den Pfad lösche funktioniert es - so sieht es einfach wie die% aus APPDATA% ersetzt nicht den eigentlichen Ordner ...

Danke,

    
JSchwartz 23.02.2013, 06:44
quelle

3 Antworten

21

Wie Sie bereits reallisiert haben, werden %APPDATA% oder andere Umgebungsvariablen nicht durch ihren entsprechenden Wert in Verbindungszeichenfolgen ersetzt. Umgebung varialbes bezieht sich auf die Betriebssystem-Shell. Sie arbeiten in der Eingabeaufforderung, da die Eingabeaufforderung die eingegebenen Werte explizit analysiert und Umgebungsvariablen ersetzt. Das ist nichts, was .NET Framework normalerweise ausführt.

Um dies zu erreichen, müssen Sie den Wert für %APPDATA% (mit Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) oder Environment.GetEnvironmentVariable("APPDATA") ) manuell angeben. Es gibt zwei Möglichkeiten:

  1. Ändern Sie Ihre Verbindungszeichenfolge und verwenden Sie |DataDirectory| :

    %Vor%

    (Beachten Sie die Verwendung von |DataDirectory| im Pfad zur Datenbankdatei.)

    Geben Sie dann den Wert für |DataDirectory| in der Hauptmethode Ihrer Anwendung an:

    %Vor%

    Weitere Informationen finden Sie auf dieser MSDN-Seite .

  2. Geben Sie die Verbindungszeichenfolge für Ihre ObjectContext-Klasse manuell ein. Auf diese Weise können Sie die Verbindungszeichenfolge analysieren und ändern:

    %Vor%

    Und später:

    %Vor%

    Oder Unterklasse Sie ObjectContext -Klasse und immer die neue Verbindungszeichenfolge:

    %Vor%

    und verwenden Sie die neue Klasse überall.

Mohammad Dehghan 23.02.2013, 07:07
quelle
4

Ich habe eine andere Option. Wir müssen nichts ersetzen. Ich benutze unten Verbindungszeichenfolge ohne irgendwelche ersetzen und es funktioniert gut.

%Vor%

Die Hauptänderung ist data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\ProjectManagementDB.mdf;integrated security=True;

Ich hoffe, das wird jemanden retten.

    
Karan Patel 23.07.2017 04:46
quelle
1

Sie müssen %APPDATA% im Code durch den relativen Pfad ersetzen -

%Vor%     
Rohit Vats 23.02.2013 07:38
quelle