2011-12-28 2 views
8

.SQL 파일을 입력 (FileInfo) 및 연결 문자열로 사용하는 클래스 라이브러리를 만듭니다. 그런 다음 연결에 대해 sql 파일을 실행하려고 시도합니다. SQLCMD는 기본적으로 설치 오지 않는,SQLCMD.exe가 설치되어 있는지 확인하는 적절한 방법은 무엇입니까?

나는 마이크로 소프트의 SMO를 지원하기로 결정하고 sqlcmd.exe를 테스트에서

, 내 환경에서 여러 컴퓨터에 나타났습니다. 프로세스 SQLCMD.exe를 실행하려고 할 때 프로그램 오류가 발생합니다.

전체 하드 드라이브를 검색하지 않고 찾아 보는 올바른 방법은 무엇입니까? 설치되어 있는지 여부를 지정하는 공통 레지스트리 위치가 있습니까? 보통 그것이 설치 될 때, 나는 PATH 위치가 설정된다고 생각한다.

감사합니다.

+0

C# 응용 프로그램의 프로세스에서'sqlcmd.exe -?'를 실행 해 볼 수 있습니다 - 작동하면 SQLCMD가 존재합니다 - 그렇지 않으면 "file not found"또는 "command"와 같은 것을 알려줍니다 무효 "또는 무언가 .... –

+0

@ marc_s 네, 그게 내가 생각했던 것입니다 ... 그냥 많은 애플 리케이션의 필수 구성 요소 것입니다 클래스 라이브러리에 대한 깨끗한 줄 알았는데. –

답변

8

64 비트 SQL Server (2k8 R2)가 설치된 64 대의 컴퓨터가 있고 SQLCMD.EXE는 c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE입니다.

경로에도 있습니다.

당신은 단지 SQL 서버 레지스트리 위치에서 직접 경로를 볼 수 있었다 : 이것에

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClientSetup\path 

또는 변형을 다른 버전.

큰 문제는 여기 SQLCMD가 SQL Server가 아닌 클라이언트 도구의 일부이므로 SQL Server에 요청할 수 없다고 생각합니다. 물론 서버 자체에서 실행되고 있지 않는 한.

+1

SQL Server는 D : 드라이브 같은 다른 디렉토리에 설치할 수 있습니다. 따라서 디렉토리를 확인하는 것은 그리 신뢰할만한 방법이 아닙니다 ... 먼저 레지스트리에서'Tools' 디렉토리를 가져와야합니다. .. –

+0

C#에서이 작업을 수행하고 Registry.LocalMachine.OpenSubKey() 메서드를 사용하면 64 비트 창 (예 : C : \ Program Files (x86) \)을 실행하는 시스템에서 x86 위치가 반환된다는 점에 유의하십시오. ...). 이 경우 SQL Server가 SQLCMD를 설치하지 않기 때문에 "파일을 찾을 수 없습니다"라는 메시지가 나타납니다. 응용 프로그램이 x86 인 경우에만 적용됩니다. –

+4

또한 Sql2012 도구는 ..Microsoft SQL Server \ 110 \ Tools .. ('100'이 아님)에 설치되며 SqlCmdLnUtils.msi를 통해 포함 된 도구를 설치하면 경로에 들어 가지 않습니다. 버전 특정 번호를 포함하는 reg 키를 사용하는 것은 현명하지 않은 것처럼 보입니다. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ SqlCmdLnUtils \ CurrentVersion은 어떻습니까? – PandaWood

관련 문제