ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • c#으로 ADOX.Create 시 클래스가 등록되지 않았습니다 예외 해결
    프로그래밍/의문 2017. 2. 1. 11:06
    반응형

    ADOX.Catalog catalog = new ADOX.Catalog();

    string connectionString = string.Format("Provider="Microsoft.ACE.OLEDB.12.0; Data Source={0}; Jet OLEDB:Engine Type=5", fileName);

    catalog.Create(connectionString); // 여기서 예외. 클래스가 등록되지 않았습니다.(class not registered)


    문제 원인


    x64비트 윈도우에서 Microsoft Access Database Engine 2010 재배포 가능 패키지를 x86 버전으로 설치한 것이 원인이었다.

    Microsoft Access Database Engine 2010 64비트 버전과 32비트(x86)버전이 있는데 MS Office가 32비트로 설치되었다고 Database Engine도 32비트로 설치하는 것이 아니라. 윈도우의 것을 따라가야 한다. 윈도우가 64비트라면 재배포 패키지도 64비트로, 윈도우가 32비트라면 재배포 패키지도 32비트인 것이다.



    문제를 찾은 과정


    SQLOLEDB

    MSDataShape

    SQLNCLI11

    Microsoft.ACE.OLEDB.12.0 // 이거!

    SQLNCLI11 Enumerator

    Windows Search Data Source

    MSDASQL

    MSDASQL Enumerator

    SQLOLEDB Enumerator

    MSDAOSP


    대게 저런 문제는 재배포 패키지가 없어서 발생하는 경우가 대부분이므로 일단 재배포 패키지(Microsoft Access Database Engine 2010)를 받았다. 오피스가 32비트로 설치 되어있어서 재배포 패키지도 32비트로 설치했는데 문제 해결이 안 되더라. 검색을 통해 OleDbEnumerator로 해당 운영체제가 사용할 수 있는 Provider를 가져올 수 있다는 것을 알고 Provider를 뽑아봤는데 Microsoft.ACE.OLEDB.12.0가 안 뜨더라. 그래서 혹시 하는 마음에 64비트로 설치를 해봤는데(os도 64비트) 그 Microsoft.ACE.OLEDB.12.0가 Provider로 목록에 들어있는 것을 확인했다.


    윈도우64bit 오피스32bit == 재배포 패키지 64bit

    윈도우64bit 오피스64bit == 재배포 패키지 64bit

    윈도우32bit 오피스32bit == 재배포 패키지 32bit


    윈도우 32비트(x86)면 재배포 패키지 32비트 버전으로,

    윈도우 64비트 버전이면 재배포 패키지도 64비트 버전으로 해야한다.


    ++

    2018-08-28


    추가적으로, 빌드 플랫폼을 Any CPU로 하니 드라이버를 설치해도 해결이 안 됐었다. 

    혹시나 하는 마음에 빌드 플랫폼을 x64로 바꾸니 해당 문제를 해결할 수 있었다. 

    정확한 원인은 추가적으로 확인을 해야한다.

    반응형
Designed by Tistory.