[C#] Microsoft.Jet.OLEDB.4.0 ‘공급자가 로컬 컴퓨터에 등록되어 있지 않습니다

32 비트 Windows 2008 서버에서 .NET 3.5로 개발 된 Windows 응용 프로그램을 만들었습니다. 64 비트 서버에 응용 프로그램을 배포하면 “Microsoft.Jet.OLEDB.4.0 ‘공급자가 로컬 컴퓨터에 등록되어 있지 않습니다”라는 오류가 표시됩니다.

따라서이 문제에 대한 해결책으로 프로젝트의 빌드 속성을 X86으로 변경하여 32 비트 모드로 빌드하고 32 비트 컴퓨터에서 프로젝트를 다시 빌드합니다. 그러나 동일한 프로젝트는 다른 DB 드라이버 (DB2, SQL 등)를 사용하여 다른 데이터베이스에 연결합니다. 따라서 64 비트 OS에서 앱을 다시 배포하면 “32 비트 플랫폼에서 64 비트 어셈블리를로드하려고했습니다.”예외가 발생합니다.

Excel (.xls)을 읽고 쓰는 데 Microsoft.Jet.OLEDB.4.0 드라이버를 사용하고 있습니다.



답변

이 문제에 대한 해결책을 찾았습니다. 필자의 질문에 설명 된 문제는 기본적으로 64 비트 OS에서 Microsoft.Jet.OLEDB.4.0 드라이버 의 비 호환성으로 인해 발생했습니다 .

따라서 64 비트 서버에서 Microsoft.Jet.OLEDB.4.0 드라이버를 사용하는 경우 응용 프로그램을 32 비트 모드로 빌드해야합니다 (이 알려진 문제 를 광범위하게 검색했을 때 찾은 대답입니다 ) 내 코드의 다른 부분이 손상됩니다.

다행히도 Microsoft는 기존 Microsoft.Jet.OLEDB.4.0 드라이버를 대체 할 수 있는 64 비트 호환 2010 Office System 드라이버 를 출시했습니다 . 32 비트와 64 비트 서버 모두에서 작동합니다. Excel 파일 조작에 사용했으며 두 환경 모두에서 잘 작동했습니다.그러나이 드라이버는 베타 버전 입니다.

이 드라이버는 Microsoft Access Database Engine 2010 재배포 가능 패키지 에서 다운로드 할 수 있습니다.


답변

ASP.NET에서 문제가 지속되면 응용 프로그램 풀의 고급 설정에서 “32 비트 응용 프로그램 사용”설정을 True로 변경하기 만하면됩니다.


답변

나도 같은 문제가있어

Microsoft.Jet.OLEDB.4.0 ‘공급자가 로컬 컴퓨터에 등록되어 있지 않습니다

neo로 답변을 적용 했지만 공급자를 “Provider = Microsoft.ACE.OLEDB.12.0;”으로 변경할 때까지 작동하지 않았습니다 . 연결 문자열에서.

누군가가 같은 문제에 직면하면 이것이 도움이되기를 바랍니다.


답변

나는 그것이 오래된 질문이며 많은 사람들이 대답했다는 것을 알고 있습니다. 그러나 나는 이해를 위해 것들을 요약하고 있습니다.

파일 확장자가 xls이고 OS가 32 비트 인 경우 ” Microsoft.Jet.OLEDB.4.0” 만 사용할 수 있습니다 . Microsoft는이 드라이버의 64 비트 버전을 출시하지 않았습니다.

파일 확장자가 xlsx이거나 OS가 64 비트 인 경우 ” Microsoft.ACE.OLEDB.12.0” 를 사용해야합니다 . 32/64 비트 모드로 컴파일 된 응용 프로그램은 드라이버 선택에 영향을 미치지 않습니다.

항상 64 비트 드라이버 Microsoft.ACE.OLEDB.12.0를 OS 64 비트에 설치하십시오 . Office 32 비트를 이미 설치 한 경우 / passive 인수를 사용하여 cmd에서 드라이버를 실행해야합니다. 이 핵은 Office 2013까지만 작동하며 Microsoft는 Office 2016에서 Microsoft.ACE.OLEDB.16.0 드라이버에 대한이 대안을 중지했습니다.

AccessDatabaseEngine_x64.exe /passive

Microsoft.ACE.OLEDB.12.0 드라이버 다운로드

private void ProcessFile(string path)
{
    string connString = string.Empty;

    if (Path.GetExtension(path).ToLower().Trim() == ".xls" && Environment.Is64BitOperatingSystem == false)
        connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
    else
        connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
}

응용 프로그램이 AnyCPU 플래그로 컴파일되면 64 비트 OS에서 64 비트 액세스 드라이버와 32 비트 OS에서 32 비트 액세스 드라이버를 찾습니다.


답변

내가, 내가 비주얼 스튜디오 2010 할 일이있는 웹 페이지를 동일한 메시지가 한, 나는 시각적 내 프로젝트에서 해당 페이지에 file.xls 읽기는 내 IIS 지역 던져에 넣어되지 않은 문제를 가지고 나 ‘마이크로 소프트 .Jet.OLEDB.4.0 ‘제공자가 로컬 시스템에 등록되어 있지 않습니다
, 다음 단계에 따라 문제를 해결했습니다.

1.-IIS 열기
2.- 고급 설정 에서 appPool 변경
3.-true 32 비트 응용 프로그램
활성화합니다.

그리고 그게 전부입니다

추신 : Active Solution Platform에서 Configuration Manager를 X86으로 변경했습니다.


답변

응용 프로그램이 localIIS에서 실행되는 경우 AppPool의 고급 설정 에서 32 비트 응용 프로그램활성화 하여이 문제를 해결할 수 있습니다.

여기에 이미지 설명을 입력하십시오


답변

나는 같은 문제가 있었다. 응용 프로그램 구성을로 변경 x86한 다음 작동했습니다!