VB.NET에서 엑셀 파일을 OleDbConnection으로 읽는 프로그램을 다른 PC에 깔았더니 연결하는 순간 이런 오류가 나는 경우가 있습니다.

'Microsoft.Jet.OLEDB.4.0' 공급자는 로컬 컴퓨터에 등록할 수 없습니다.
'Microsoft.ACE.OLEDB.12.0' 공급자는 로컬 컴퓨터에 등록할 수 없습니다.

검색하다 보면 Microsoft.Jet.OLEDB.12.0이라고 적힌 글도 보이는데, 그런 이름의 공급자는 없습니다. Jet은 4.0이 마지막이고, 12.0부터는 이름이 ACE(Microsoft.ACE.OLEDB.12.0)로 바뀌었습니다. 연결 문자열을 고칠 때 이 이름부터 정확한지 확인하세요.

광고

왜 "등록할 수 없다"고 나오나

메시지만 보면 설치가 안 된 것 같지만, 실제로는 대부분 비트 수 문제입니다. Office 2010부터 64비트 오피스를 설치할 수 있게 되면서, 오피스와 함께 깔리는 ACE 공급자도 오피스 비트 수를 따라가게 됐습니다. 그런데 OLEDB 공급자는 그걸 불러 쓰는 프로그램과 비트 수가 같아야 합니다. 32비트 프로그램은 32비트 공급자만, 64비트 프로그램은 64비트 공급자만 찾습니다. 그래서 정품 오피스가 멀쩡히 깔려 있는 PC에서도 "공급자가 없다"는 오류가 납니다.

VB.NET 쪽에서 먼저 확인할 곳은 프로젝트 속성의 플랫폼 대상입니다. Any CPU로 빌드하면 64비트 윈도우에서는 64비트 프로세스로 실행되는데, Jet 4.0은 32비트용만 있기 때문에 이 상태로는 절대 연결되지 않습니다. Jet 4.0(.xls, .mdb)을 써야 한다면 플랫폼 대상을 x86으로 바꾸는 것만으로 해결되는 경우가 많습니다. ACE를 쓴다면 대상 PC에 설치된 ACE 공급자의 비트 수에 맞춰 x86 또는 x64로 빌드합니다. 참고로 .xlsx를 읽는 연결 문자열은 보통 이런 모양입니다.

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\data\test.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES"

공급자가 아예 없을 때: Access Database Engine

오피스가 없는 PC이거나 필요한 비트 수의 공급자가 없다면, Microsoft가 배포하는 "Microsoft Access Database Engine 2010 재배포 가능 패키지"를 설치하면 됩니다. 32비트용 AccessDatabaseEngine.exe와 64비트용 AccessDatabaseEngine_X64.exe 두 가지가 있습니다.

http://www.microsoft.com/downloads/en/details.aspx?familyid=C06B8369-60DD-4B64-A44B-84B371EDE16D&displaylang=en

예전 글들에서 안내하는 2007 Office System Driver(데이터 연결 구성 요소) 다운로드 페이지는 이미 사라져서 열리지 않습니다. 지금은 위 재배포 패키지를 받는 쪽이 맞습니다.

설치가 막힐 때는 /passive

문제는 오피스와 다른 비트 수의 패키지를 설치하려 할 때입니다. 예를 들어 64비트 오피스가 깔린 PC에 32비트 AccessDatabaseEngine.exe를 실행하면, 설치 대신 "Microsoft Office Professional Plus 2010" 같은 기존 64비트 오피스 제품을 먼저 제거하라는 메시지가 뜨면서 중단됩니다. 반대 조합도 마찬가지입니다.

이때는 명령 프롬프트에서 /passive 인수를 붙여 실행하면 이 검사를 건너뛰고 설치가 진행됩니다.

64비트 오피스가 설치된 PC에 32비트 공급자를 설치할 때:

AccessDatabaseEngine.exe /passive

32비트 오피스가 설치된 PC에 64비트 공급자를 설치할 때:

AccessDatabaseEngine_X64.exe /passive

다운로드 폴더에 받아 뒀다면 cmd를 열고 cd downloads로 이동한 다음 위 명령을 입력하면 됩니다. /passive는 진행 막대만 보여 주고 사용자 입력 없이 설치하는 모드라, 화면에 별다른 질문 없이 설치가 끝납니다.

명령 프롬프트에서 AccessDatabaseEngine.exe /passive 로 설치를 실행하는 화면

설치가 끝난 뒤 프로그램을 다시 실행하면 엑셀 읽기가 정상적으로 됩니다.

다만 한 PC에 32비트와 64비트 ACE가 섞여 있는 상태는 Microsoft가 공식적으로 지원하는 구성이 아닙니다. 대부분 문제없이 쓰지만, 이후 오피스 업데이트나 복구 설치 때 꼬일 가능성이 있다는 건 염두에 두세요. 배포 대상 PC를 직접 관리할 수 없는 프로그램이라면, 공급자 대신 엑셀 파일을 직접 읽는 라이브러리(ClosedXML, NPOI 등)로 바꾸는 쪽이 장기적으로는 덜 번거롭습니다.