2011-03-16 3 views
9

ACE 또는 JET의 설치 여부를 Windows xp/vista/7을 실행하는 컴퓨터에서 확인하는 방법으로 적절한 연결 문자열을 사용하여 액세스 데이터베이스에 연결할 수 있습니다..net을 사용하여 Windows 컴퓨터에서 ACE 또는 JET를 확인하는 방법은 무엇입니까?

+1

Jet가 항상 설치됩니다. 질문은 실제로 ACE가 설치되었는지 여부와 관계가 있습니다. –

+1

"ACE"라는 태그는 ACE (Adaptive Communication Environment) (http://www.cse.wustl.edu/~schmidt/ACE.html)를 생각하면 자신을 비롯한 대부분의 개발자가 당신의 질문과 아무 관련이 없습니다. –

+0

@Alexei : 태그를 제거했습니다 – willem

답변

7

확인할 수있는 레지스트리 키가 있습니다. HKCR\Microsoft.ACE.OLEDB.12.0에 있습니다. RegistryKey 클래스를 사용하여 읽을 수 있습니다.

2

레지스트리 키가있을 수 있지만 32 비트/64 비트 문제로 인해 OleDb 연결이 계속 실패 할 수 있습니다. 대상 컴퓨터에 32 비트 ACE.OLEDB가 설치되어 있으면 해당 응용 프로그램이 32 비트 CPU를 대상으로 컴파일되었는지 확인하십시오. 그렇지 않으면 응용 프로그램이 64 비트 (64 비트 OS)에서 실행될 수 있으며 32 비트 버전의 ACE.OLEDB를로드 할 수 없습니다.

+1

공급자의 아키텍처 (설치된 경우)를 어떻게 확인할 수 있습니까? –

5

동의합니다. 레지스트리는 가장 좋은 방법 (32 비트 및 64 비트 버전 및 사용자 권한 등)이 아닙니다. 그러나 원래 질문은 "적절한 연결 문자열 사용"이라고 명시되어 있습니다. 이는 런타임 문제가 아니라 컴파일 타임 문제. 솔루션은 OleDbEnumerator를 사용하는 것일 수 있습니다.

다음은 Microsoft Access (ACE 12.0)의 32 비트 버전을 확인하는 예입니다. x86 응용 프로그램의 경우 :

using System.Data; 
using System.Data.OleDb; 

    static bool AceOleDb12Present() 
    { 
     OleDbEnumerator enumerator = new OleDbEnumerator(); 
     DataTable table = enumerator.GetElements(); 
     bool bNameFound = false; 
     bool bCLSIDFound = false; 

     foreach (DataRow row in table.Rows) 
     { 
      foreach (DataColumn col in table.Columns) 
      { 
       if ((col.ColumnName.Contains("SOURCES_NAME")) && (row[col].ToString().Contains("Microsoft.ACE.OLEDB.12.0"))) 
        bNameFound = true; 
       if ((col.ColumnName.Contains("SOURCES_CLSID")) && (row[col].ToString().Contains("{3BE786A0-0366-4F5C-9434-25CF162E475E}"))) 
        bCLSIDFound = true; 
      } 
     } 
     if (bNameFound && bCLSIDFound) 
      return true; 
     else 
      return false; 
    } 
관련 문제