2008-09-24 7 views
14

webstconfig의 connectionstring, attachDbFileName 속성에서 상대 경로 참조를 지정할 수 있습니까?WebConfig.ConnectionString의 상대 경로 참조

예를 들어, 내 데이터베이스가 App_data 폴더에 있고, DataDirectory | \ mydb.mdf 및 Datadirectory | AttachDBFilename을 쉽게 지정할 수 있습니다. 자동으로 정확한 경로로 해석됩니다.

이제 web.config 파일이 A 폴더에 있지만 데이터베이스가 B \ App_data 폴더에 있고 A 및 B 폴더가 같은 폴더에 있다고 가정합니다. 상대 경로 참조를 사용하여 올바른 경로로 해결할 수 있습니까?

답변

10

'DataDirectory |'위치에 따라 다릅니다. 위치. '| DataDirectory |'의 해결 된 값 (Web.config가있는) 폴더 A에 있으면 '| DataDirectory |'의 확인 된 값의 하위 폴더가 아닌 상대 경로를 지정할 수 없습니다.

무엇이 입니까? do가 '| DataDirectory |'값으로 설정되어 있습니다. 원하는 위치로 이동하려면 AppDomain.SetData 메서드를 호출하면됩니다. 은 MSDN 온라인 설명서에서

:

DataDirectory를 사용하는 경우, 결과 파일 경로가 디렉토리가 대체 문자열 가리키는 것보다 디렉토리 구조에서 더 높은 수 없습니다. 예를 들어, 완전히 확장 된 DataDirectory가 C : \ AppDirectory \ app_data 인 경우 위의 샘플 연결 문자열은 c : \ AppDirectory 아래에 있기 때문에 작동합니다. 그러나 DataDirectory를 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

정말 고마워요 !! 나를 많이 구해줬다! –

1

테스트 메서드에 다음 특성을 추가하십시오.

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

|DataDirctory| 변수는 테스트를 실행할 때 시스템에 의해 정의됩니다. DeploymentItem은 스프레드 시트를 복사합니다. 스프레드 시트와 스프레드 시트의 데이터가 들어오는 탭을 가리 킵니다. 탭을 마우스 오른쪽 버튼으로 클릭하여 이름을 기억하기 쉬운 이름으로 바꿉니다.