2010-09-13 8 views
5

* .sdf 파일에 Database (compact SQL server)가 있습니다. 컴팩트 프레임 워크 프로젝트를 일반 PC 프로젝트로 변환했는데 어떤 이유로 동일한 코드와 동일한 * .sdf 파일을 사용하여 다음 예외가 발생했습니다 : "파일 이름이 유효하지 않습니다. 데이터베이스 "SQL 연결 문자열 문제

이상한 일은 내 PC에 있습니다. 하위 문자열"file : \ "이 원래 연결 문자열에 추가되었으므로 아마 예외가 throw됩니다. 런타임시 디버그 모드에서 "file : \"하위 문자열을 제거하면 예외가 발생하지 않습니다.

왜이 하위 문자열이 추가 되었습니까? 그거 어디서 났어? 이 문제를 어떻게 해결할 수 있습니까?

최근에 app.config 파일이 없다는 사실에 약간의 연관성이 있음을 발견했습니다. 이것은 원래의 연결 문자열이 어떻게 존재 하는지를 설명하지 않고, 추가 된 부분 문자열 만 가지고 있습니다.

도와주세요. 미리 감사드립니다.

+0

sdf 파일이 로컬입니까? 하위 폴더에? 어디 있니? 연결 문자열이 어떻게 생겼는지 예를 들려 줄 수 있습니까? – curtisk

+0

예, 로컬입니다. "C : \ solutionname \ projectname \ bin \ debug \ sdfname.sdf" 연결 문자열에 있습니다. "파일 : \\ C : \\ 솔루션 이름 \\ 프로젝트 이름 \\ bin \\ 디버그 \\ sdfname.sdf " – George

답변

0

Windows CE에는 "현재 디렉토리"가 없으므로 구현시 대개 현재 실행중인 어셈블리의 위치를 ​​검색 할 디렉토리로 가져옵니다. 바탕 화면에서 Assembly.GetExecutingAssembly().GetName().CodeBase에 의해 반환 된 문자열은 해당 스키마 접두사 .

+0

Assembly.GetexecutingAssembly(). GetName(). CodeBase 란 무엇입니까? 및 그 문제를 어떻게 수정합니까? – George

+0

"sdfname.sdf"를 입력하면 해당 파일을 여는 프로세스는 예를 들어 "c : \ somefolder \ sdfname.sdf"로 해석해야합니다. Windows 컴퓨터 개발자는 일반적으로 파일이 현재 폴더에 있다고 가정하지만 Windows CE에서 "현재 폴더"가없는 경우 CE 개발자는 일반적으로 어셈블리 경로를 사용합니다. –

+0

Windows CE에서이 함수는 수정되지 않은 파일을 여는 데 사용할 수있는 경로를 반환하지만 전체 프레임 워크에서는 스키마 접두어 (파일 : \\\)가 추가됩니다. 필자는 제 3 자 라이브러리에서 CF 버전 대신 사용할 수있는 전체 프레임 워크 버전을 볼 수 있다면 상대적인 절대 변환이 어디에서 발생했는지 모릅니다. –

1

"file : //"이 필요한 이유가 표시되지 않습니다. 그것없이 잘 작동합니다. 파일 : \ 대신에 \를 사용하는 것이 잘못되었습니다. //

+0

어쩌면 나는 정확하게 자신을 설명하지 않았다. "파일 : \"접두사가 자동으로 추가되었으므로 추가하지 않았다. 그래서 예외가 발생합니다 (프레임 워크가 아닌). 그 이유는 알 수 없습니다. 그 접두어의 기원을 찾고 그 이유를 이해하고 싶지만 지금 당장 예외를 throw하는 함수를 호출하기 전에 런타임에 직접 제거하기 위해 안장을합니다. 불행히도 연결 문자열은 비공개이며 그에 따라 액세스 할 수 없습니다. – George

+0

당신은 분명히했습니다, 나는 단지 그것을 올바르게 읽지 않았습니다. 연결 문자열은 "Data Source = c : \ db.sdf"여야합니다. – Bryan