2012-06-27 3 views
0

, 응용 프로그램 코드에서 데이터베이스의 로컬 인스턴스가 빠르고 안전하게 존재하는지 확인하려면 어떻게합니까? 여부를 확인하는 방법은 무엇

  • 는 SQL 서버
  • 그렇다면의 로컬로 실행중인 인스턴스, 데이터베이스 X가 존재한다?
  • 그렇다면 X가 통합 보안을 사용하여 연결될 수 있습니까?

위의 작업은 가능한 한 가장 깨끗한 방법으로 응용 프로그램을 시작할 때 수행하고 싶습니다. 일반적으로 다양한 개발 도구의 연결 마법사에서 데이터베이스를 찾아보기 위해 드롭 다운을 클릭하면 일반적으로 나타나는 지연을 소개하는 것에 대해 걱정이됩니다.

인스턴스 이름이 . 또는 .\sqlexpress 인 것으로 가정 할 수 있습니다.

최종 사용자는 주로 Windows XP를 실행하고 있습니다.

실제 컨텍스트는 내 응용 프로그램이 개발자가 설치할 수있는 로컬 데이터베이스를 자동으로 인식하도록하려는 것입니다.

연결 문자열에 apprpriate 값으로 SqlConnection을 만드는 것만 큼 간단하고 안전하고 권장되는 방법 인 경우 그 점을 잘 알고 있습니다. 나쁜 최종 사용자 경험을 소개하지 않는 것이 안전하기 때문에이 질문을드립니다. 당신이 . 또는 .\sqlexpress 중 하나를보고 알고있는 경우

답변

1

단순히 try-catch에 연결하고 master.sysdatabases에서 선택을 수행 할.

서버를 모르는 경우 SQL Server Management Object 라이브러리를 사용하여 검색 가능한 모든 인스턴스/데이터베이스를 나열 할 수 있습니다.

How to list available instances of SQL Servers using SMO in C#?

SMO Server 클래스는 다음 반복하는 Databases 속성이 :이 질문은 방법을 자세히 설명합니다.

+0

SMO는 상당히 중량 적이라는 느낌이 들었지만 응용 프로그램과 함께 배포 할 수있는 일부 어셈블리가 아닌 것으로 판명 된 경우 좋은 해결책이 될 수 있습니다. 감사합니다. –

+0

@AaronAnodide 발견 가능한 모든 서버를 열거하기 때문에 속도가 느려질 것입니다. 서버를 알고 있으면 master.sys 데이터베이스를 연결하고 수동으로 쿼리하십시오. –

1

(local) 서버에 연결하십시오. 좋으면 master 데이터베이스로 전환하십시오. 그런 다음이 SQL 문을 실행하십시오.

SELECT * FROM sysdatabases WHERE name = 'YOUR DB NAME HERE' 
+1

(local)은 로컬 인스턴스 ('. \ sqlexpress')가 아닌 기본 인스턴스 만 찾습니다. –

0

특성 SqlConnection.ConnectionString을 사용하고 연결 시간 초과 값을 설정하십시오. 기본값은 15 초이며, 이는 오랜 시간입니다. 따라서 Adam의 생각처럼 모든 DB 서버를 나열하고 시간 초과 값을 줄이면 사용자 경험이 그렇게 나쁠 것입니다.

자세한 내용은 SqlConnection Class입니다.

SQL 쿼리를 만들고 싶지 않습니다. 실패하기 전에 오랜 시간이 걸릴 수 있습니다.

@Aaron, 귀하가 결정한 사항을 알려주십시오.