2008-09-24 9 views
14

Czy jest możliwe określenie względnego odwołania do ścieżki w połączeniu łańcuchowym, attachDbFileName w pliku web.config?Względna ścieżka do odwołania w WebConfig.ConnectionString

Na przykład: W mojej bazie danych znajduje się w folderze App_data, mogę łatwo określić AttachDBFilename jako | DataDirectory | \ mydb.mdf i | Datadirectory | automatycznie rozwiąże poprawną ścieżkę.

Załóżmy teraz, że plik web.config znajduje się w folderze A, ale baza danych znajduje się w folderze B \ App_data, w którym folder A i B znajduje się w tym samym folderze. Czy mimo to należy użyć względnego odwołania do ścieżki, aby rozwiązać poprawną ścieżkę?

Odpowiedz

10

To zależy od tego, gdzie "| DataDirectory |" jest usytuowany. Jeśli rozstrzygnięta wartość "| DataDirectory |" znajduje się w folderze A (gdzie jest plik web.config), a następnie nie - nie można określić ścieżki względnej, która nie jest podfolderem rozstrzygniętej wartości "| DataDirectory |".

Co można ustawić jako do wartości "| DataDirectory |" być tam, gdzie chcesz, wywołując metodę AppDomain.SetData.

Z dokumentacji online MSDN:

Gdy stosuje DataDirectory otrzymaną ścieżka pliku nie może być wyższa w strukturze katalogów niż katalog wskazywany przez ciąg substytucji. Na przykład, jeśli w pełni rozwinięta DataDirectory jest C: \ AppDirectory \ app_data, to przykładowy ciąg połączenia pokazany powyżej działa, ponieważ znajduje się poniżej c: \ AppDirectory. Jednak próba określenia DataDirectory jako | DataDirectory | .. \ data spowoduje błąd, ponieważ \ data nie jest podkatalogiem \ AppDirectory.

Mam nadzieję, że to pomoże.

0

W IIS można również utworzyć katalog wirtualny wskazujący, gdzie jest przechowywana rzeczywista baza danych. Następnie twój ciąg połączenia odwołuje się do katalogu wirtualnego.

15

Miałem ten sam problem z następującym scenariuszem: chciałem użyć tej samej bazy danych, co aplikacja z moich testów integracyjnych.

poszedłem z poniższego rozwiązania:

W app.config mojej testowym projekcie mam:

<appSettings> 
    <add key="DataDirectory" value="..\..\..\BookShop\App_Data\"/> 
</appSettings> 

W badanej konfiguracji I wykonać następujący kod:

var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"]; 
    var absoluteDataDirectory = Path.GetFullPath(dataDirectory); 
    AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory); 
+0

Dziękuję bardzo! Ocalił mnie tak bardzo! –

1

Dodaj następujące atrybuty do metody testowania:

[DeploymentItem("..\\TestSolutionDir\\TestProjedtDir\\TestDataFolder\\TestAutomationSpreadsheet.xlsx")] 
[DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|\\TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)] 

Zmienna |DataDirctory| jest definiowana przez system podczas uruchamiania testu. DeploymentItem kopiuje tam arkusz kalkulacyjny. Wskazujesz arkusz kalkulacyjny i kartę w arkuszu kalkulacyjnym, z którego pochodzą dane. Kliknij kartę prawym przyciskiem myszy, aby zmienić nazwę na łatwą do zapamiętania.

Powiązane problemy