2017-05-18 5 views
-3

프로젝트 작업 중이며 Windows 기반 .NET 응용 프로그램입니다. 상대 경로를 만들어 다른 컴퓨터로 파일을 이동할 때 새 연결을 다시 설정하지 않도록하고 싶습니다.app.config의 상대 연결 문자열을 사용하는 .NET Windows 응용 프로그램

지금까지 내가 한 것은 다음과 같습니다. 내 app.config에서

: 내 프로그램에서

<connectionStrings> 
    <add name="ConString" 
     connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\dbOffense.mdf;Integrated Security=True;Connect Timeout=30" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

. 이 코드는 어떤 기능에도 없습니다. 전 세계적으로 선언됩니다.

Dim constr As String=ConfigurationManager.ConnectionStrings("ConString").ConnectionString() 
Dim con As New SqlConnection(constr) 

내 데이터베이스 dbOffense.mdf는 내 Windows 응용 프로그램 OffenseDatabase과 같은 폴더에 있습니다. 내 응용 프로그램의 파일이 .exe 인 폴더에 없습니다.

지금까지 읽은 모든 것이 실제로 작동하지 않습니다.

나는 dbOffense.mdfbin/Debug/Database 디렉토리로 이동 시키려고 시도했다. 그런 다음 .NET 응용 프로그램에서 새 연결/데이터 소스를 제거하고 설정할 때마다 데이터 폴더는 dbOffense.mdf과 동일한 폴더 대신 Windows 응용 프로그램 OffenseDatabase이있는 동일한 폴더에 생성됩니다.

누군가 도와 드릴 수 있습니까?

+0

"내 Windows 응용 프로그램 OffenseDatabase와 같은 폴더"라고 말하면 프로젝트 폴더에 대해 이야기하고 있습니까? – jmcilhinney

+0

@jmcilhinney 예. 나는 나의 현재 상황을 공유한다면 여전히 내 문제에 대한 해결책을 찾고있다. – NoobCoder

답변

1

실제로 문제가 없지만 만들려고합니다. 로컬 데이터 파일은 그대로 작동하지만 일부 사람들은 깨닫지 못하고 삶을 더 어렵게 만듭니다. 여기 그것이 작동하는 방법입니다.

데이터 파일을 프로젝트에 추가하면 프로젝트 폴더에 저장됩니다. 프로젝트 폴더의 다른 모든 파일과 마찬가지로 소스 파일입니다. 런타임에는 사용되지 않습니다. 데이터베이스 스키마 또는 기본 데이터를 변경하려면 해당 소스 파일에서 변경하십시오. 형식화 된 DataSet 또는 Entity Framework 모델 등을 생성하면 해당 파일에서 수행합니다.

프로젝트를 빌드 할 때 런타임에 사용되는 파일은 출력 폴더에 저장됩니다. 디버그 빌드의 경우, 일반적으로 프로젝트 폴더 아래의 'bin \ Debug'이고 릴리스 빌드의 경우 일반적으로 'bin \ Release'입니다. 원본 데이터 파일이 복사되어 EXE 및 기타 출력 파일과 함께 해당 출력 폴더에 저장됩니다. 소스 파일이 아니라 런타임에 연결할 사본입니다. 이것의 한 가지 분명한 장점은 배포 할 시간이되면 릴리스 출력에 디버깅에 사용했던 파일을 정리하지 않고 원본 파일의 멋진 복사본이 포함된다는 것입니다.

기본적으로 데이터 파일의 Copy To Output Directory 속성은 Copy Always으로 설정됩니다. 즉, 코드를 변경하고 다시 빌드 할 때마다 'bin \ Debug'폴더의 이전 복사본을 덮어 씁니다. 이것은 많은 사람들이 원하는 것이 아닙니다. 대부분의 사람들은 대부분 테스트 데이터가 빌드간에 유지되기를 원합니다. 이 경우 해당 속성을 Copy If Newer으로 설정하면 원본 파일을 변경할 때만 새 복사본이 만들어집니다.

정상적으로 작동하는 것이 아닌 한 간단히 말해서 연결은 그대로 작동합니다. "| DataDirectory |" place-holder는 런타임에 올바른 폴더로 해석됩니다. 소스 파일이 프로젝트에 추가되었는지 확인한 다음 Copy To Output Directory 속성을 변경해야합니다.

+0

@jmcillhinney 음 안녕. 나는 다시 돌아왔다. 귀하의 제안은 효과가 있었지만 데이터베이스를 편집/업데이트 할 때 원래 데이터로 되돌려졌습니다. 시나리오는 다음과 같습니다. 내 컴퓨터에서 데이터베이스의 테이블 중 하나에 5 개의 입력이있는 경우 다른 컴퓨터로 전달하면 다시 하나의 데이터 만 반환됩니다. 그 이유를 알지 못하면서 파란에서만 나온다. – NoobCoder

+0

"Copy If Newer"로 변경된 것은 내 .mdf 파일과 .xsd 파일뿐입니다. – NoobCoder

+0

'Copy If Newer '는 빌드 할 때마다 원본 파일이 작업 파일에 복사되고 원본 파일의 마지막 수정 시간이 작업 파일의 마지막 수정 시간 이후임을 의미합니다. 이는 일반적으로 소스 파일에서 스키마 또는 데이터를 변경하는 경우에만 발생하며,이 경우 작업 파일이 겹쳐 쓰여져 있어야합니다. IDE는 열 때마다 소스 파일의 마지막 수정 시간을 설정할 수 있습니다. 그것은 당신이 살아야만하는 것입니다. 문제가 있으면 작업 파일을 직접 가져 와서 필요에 따라 복원하십시오. – jmcilhinney