2008-09-24 3 views
14

Можно ли указать ссылку относительного пути в connectionstring, attachDbFileName в файле web.config?Относительная ссылка пути в WebConfig.ConnectionString

Например, В моей базе данных находится в папке App_data, поэтому я легко могу указать AttachDBFilename как | DataDirectory | \ mydb.mdf и | Datadirectory | автоматически разрешит правильный путь.

Предположим, что файл web.config находится в папке A, но база данных находится в папке B \ App_data, где папка A и B находится в той же папке. Нужно ли использовать ссылку относительного пути для правильного пути?

ответ

10

Это зависит от того, где находится ваш 'DataDirectory' расположен. Если разрешенное значение '| DataDirectory' находится в папке A (где находится файл web.config), затем нет - вы не можете указать относительный путь, который не является подпапкой разрешенного значения '| DataDirectory |'.

Что вам может do установить значение '| DataDirectory |' чтобы быть там, где вы хотели бы, вызвав метод AppDomain.SetData.

Из онлайновой документации MSDN:

Когда DataDirectory используется, полученный путь к файлу не может быть выше в структуре каталогов, чем в каталоге, на который указывает строку замещения. Например, если полностью расширенный DataDirectory - это C: \ AppDirectory \ app_data, то примерная строка соединения, показанная выше, работает, потому что она ниже c: \ AppDirectory. Однако попытка указать DataDirectory as | DataDirectory | .. \ data приведет к ошибке, потому что \ data не является подкаталогом \ AppDirectory.

Надеюсь, это поможет.

0

В IIS вы также можете создать виртуальный каталог, который указывает, где хранится реальная база данных. Тогда ваша строка подключения просто ссылается на виртуальный каталог.

15

У меня была такая же проблема со следующим сценарием: я хотел использовать ту же базу данных, что и приложение, из моих тестов интеграции.

Я пошел со следующим обходного:

В App.config моего тест-проекта у меня есть:

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

В тест-установки я выполнить следующий код:

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

спасибо! Спасло меня так много! – 2017-04-15 23:02:03

1

. К методам испытаний добавьте следующие атрибуты:

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

Переменная |DataDirctory| определяется системой при ее проведении. Модуль DeploymentItem копирует таблицу там. Вы указываете на таблицу и на вкладку в электронной таблице, откуда поступают данные. Щелкните правой кнопкой мыши на вкладке, чтобы переименовать ее в нечто легко запоминающееся.

Смежные вопросы