66

두 프로젝트 (Word-Template 프로젝트 및 테스트 용 VB.Net 콘솔 응용 프로그램)가있는 Visual Studio 2008 솔루션이 있습니다. 두 프로젝트는 모두 MS-Access 2007 데이터베이스 파일에 대한 연결을 열고 System.Data.OleDb에 대한 참조를 갖는 데이터베이스 프로젝트를 참조합니다. 데이터베이스 프로젝트에서 다음과 같이 데이터 테이블을 검색하는 함수가 있습니다.

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Word 2007 템플릿 프로젝트에서이 함수를 호출하면 모든 것이 잘 작동합니다. 오류 없음. 하지만 콘솔 응용 프로그램에서 실행할 때 다음 예외가 throw됩니다.

ex = { "Microsoft.ACE.OLEDB.12.0 '   제공 업체가   로컬 컴퓨터. "}

두 프로젝트 모두 동일한 참조 정보를 갖고 콘솔 애플리케이션은 처음 작성한 (얼마 전) 작업을했지만 지금은 작동을 멈췄습니다. 나는 뭔가를 놓치고 있어야하지만 나는 무엇을 모른다. 어떤 아이디어?


9 답변


42

Visual Studio 2008에서 Access 2007 데이터베이스를 사용하고 같은 오류가 발생하는 Visual Basic 프로그램이 있습니다. 64 비트 시스템을 실행하는 경우 프로그램 속성에서 x86에 대한 고급 컴파일 구성을 변경하라는 메시지가 표시되는 스레드를 발견했습니다. 지금까지 나는 내 프로그램에 아무런 문제가 없었습니다.


  • 그러나 asp.net 응용 프로그램의 경우 이는 IIS에 의해 결정되므로이 문서를 확인하십시오.support.microsoft.com/kb/894435/en-us - devzero
  • ASP.NET 응용 프로그램에서 동일한 문제가 발생했습니다. 코드는 로컬에서 실행되었지만 서버에서는 실행되지 않았습니다. 2007 Office System Driver : 데이터 연결 구성 요소를 여기에 설치하는 데 필요합니다.microsoft.com/downloads/en/…, 웹 사이트의 작업자 프로세스 (응용 프로그램 풀)가 32 비트 응용 프로그램을 허용 할 수있게해야했습니다. - Keith
  • x86을 사용할 수없는 사람들을 돕지는 못합니다. 64 비트 용 ACE 버전이 있습니다.goo.gl/Cxsf1, 거기에 호환성 문제가 있기 때문에 Office 2003을 제거해야합니다. - Jordan
  • Access db 엔진 재배포자를 설치 한 상태에서 64 비트 OS 및 Office 2010 x86 버전을 가지고 있지만 인터넷에서 가능한 모든 해결책을 사용하여 오류를 수정하려고합니다.하지만 작동하지 않습니다. 나는 또한 같은 공급자가 일하는 또 다른 프로젝트를 가지고있다. - incomplete

52

기본적으로 64 비트 컴퓨터를 사용하는 경우 IIS 7은 기본적으로 데이터베이스 엔진이 작동하는 32 비트 응용 프로그램을 제공하지 않습니다. 여기 정확히 당신이하는 일이 있습니다 :

1) 2007 데이터베이스 엔진이 설치되어 있는지 확인하십시오.이 데이터베이스는 다음 위치에서 다운로드 할 수 있습니다.http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en

2) IIS7 관리자를 열고 응용 프로그램 풀 영역을 엽니 다. 오른쪽 사이드 바에 "응용 프로그램 풀 기본값 설정"옵션이 표시됩니다. 그것을 클릭하면 옵션이있는 창이 나타납니다.

3) '32 비트 응용 프로그램 활성화'라는 두 번째 필드는 기본적으로 FALSE로 설정되어 있습니다. '거짓'이라고 말한 부분을 클릭하기 만하면 '참'으로 바뀝니다.

4) 응용 프로그램 풀을 다시 시작합니다 (STOP, START 대신 RECYCLE을 눌러이 작업을 수행 할 수 있습니다).

5) 완료하고 오류 메시지가 사라집니다.


  • 이것은 나를 위해 일했습니다 ... Visual Studio 2010 Premium, Windows Server 2008 R2, IIS 7, 계층화 된 웹 응용 프로그램에서 WCF 사용. - longda
  • 감사합니다 - 정확히 내가 필요로하는 것! - Andy
  • +1, 당신의 추천이 효과가있었습니다. - Phil
  • 이것은 앱 풀이 32 비트 모드로 완전히 실행된다는 것을 의미합니다. - John Weldon

7

32 비트를 실행하는 데이터베이스와 64 비트를 실행하는 콘솔을 사용하여 64 비트 시스템을 실행하고 있습니까? 64 비트를 실행하는 MS Access 드라이버는 없으며보고 된 오류와 동일한 오류를보고합니다.


  • 예, 64 비트 XP를 실행 중이며 이것이 정확하게 문제였습니다. 고급 컴파일 옵션의 대상 CPU를 x86 비트 응용 프로그램으로 전환하여 모든 작업이 완료되었습니다. 감사 - Azim

5


해결책:

그게 다야! Arjun Paudel에게 감사드립니다. 다음은 XNA Creator 's Club Online에서 찾을 수있는 솔루션입니다. Stephen Styrchak입니다.

다음 오류는 64 비트 용으로 컴파일하고 있다고 생각합니다.

'Microsoft .ACE.OELDB.12.0'공급자가 로컬 컴퓨터에 등록되지 않았습니다.

나는 표현판을 가지고 있지 않지만 2008 년 표현에서 유효한 단계를 따르고 있습니까?

http://forums.xna.com/forums/t/4377.aspx#22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required

- 아르 주 파델


에서VC# Express,이 속성은 누락되었지만 사용자가 어디에서 봐야하는지 알 경우 x86 구성을 만들 수 있습니다.

긴 단계의 목록처럼 보이지만 일단 이러한 것들이 어디에 있는지 쉽게 알게되면 훨씬 쉽게됩니다. 오직있는 사람VC# Express아마도 이것이 유용 할 것입니다. 일단 당신이 알고 있으면Configuration Manager다음 번에는 훨씬 직관적 일 것입니다.

1. VC # Express 2005에서 다음으로 이동하십시오.Tools -> Options.

2. 옵션 대화 상자의 왼쪽 아래 모서리에있는 확인란을 선택하십시오."Show all settings".

3. 왼쪽의 트리보기에서 다음을 선택하십시오."Projects and Solutions".

4. 오른쪽 옵션에서 상자에 체크 표시를하고,"Show advanced build configuraions."

5.ClickOK.

6. 이동Build -> Configuration Manager...

7. 프로젝트 옆의 플랫폼 열에서 콤보 박스를 클릭하고"<New...>".

8.In"New platform" setting, choose "x86".

9.ClickOK.

10.ClickClose.

이제 x86 구성을 갖게되었습니다! 파이처럼 쉽게! :-)

나는 또한 사용하는 것이 좋습니다Configuration Manager모든 CPU 플랫폼을 삭제합니다. 32 비트 네이티브 DLL (간접적 인 종속성조차도)에 절망감이 있다면 절대 원하지 않을 것입니다.

Stephen Styrchak | XNA Game Studio 개발자http://forums.xna.com/forums/p/4377/22601.aspx#22601



  • 컴파일러 대상 (x86 또는 64 비트) 변경에 대한 추가 정보 및 자세한 설명을 보내 주셔서 감사합니다. - Azim

3

문제의 약간 다른 상황에 직면 할 때이 질문을 발견하고 앞으로 다른 고통받는 영혼을 도울 것이라고 생각했기 때문에 차임을하고 싶다고 생각했습니다.

Windows Server 2008 64 비트에서 실행되는 IIS 7.0에서 호스팅되는 ASP.NET 응용 프로그램을 사용했습니다.

IIS가 프로세스 비트를 제어하기 때문에 내 경우의 솔루션은 Enable32bitAppOnWin64 설정을 true로 설정하는 것이 었습니다.http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx

IIS 6.0에서 약간 다르게 작동합니다 (응용 프로그램 풀 수준에서 Enable32bitAppOnWin64를 설정할 수 없음)http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true


2

나는 똑같은 문제를 겪고있다. 필자는 Windows 7 64 비트를 Windows 7 64 비트에 설치하려고 시도하고 2007 Office System Driver : 데이터 연결 구성 요소를 설치하려고합니다.

그 후에 Visual Studio 2008은 MS-Access 2007 데이터베이스 파일에 대한 연결을 열 수 있습니다.


2

비슷한 스택 교환 스레드에 내 게시물을 참조하십시오https://stackoverflow.com/a/21455677/1368849

나는이 PowerShell 코드를 실행하여 발견 한 12 개가 아닌 15 버전을 설치했다.

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

... 나에게이 결과를주었습니다 (간략하게 다른 데이터 소스를 제거했습니다) ...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider


1

완전히 업데이트 된 Windows Vista 제품군 64 비트에서 .NET 응용 프로그램과 동일한 오류가 발생했습니다.이 비트 프로그램은 64 비트 컴퓨터의 programx86 폴더에 설치됩니다. 이 오류 메시지는 2007 Access 데이터베이스 공급자가 설치된 경우에도 실패합니다. 설치된 SP2, IIS 및 설치된 32 비트 응용 프로그램 풀에 대한 응용 프로그램 풀은 다음과 같습니다. 모든 솔루션을 어디에서나 시도했지만 성공하지 못했습니다.

JET4.0이 64 비트 시스템에서 실패했기 때문에 내 응용 프로그램을 ACE OLE DB.12.0으로 전환했습니다. 더 좋았습니다. - / 내가 찾은 가장 유망한 스레드는 다음과 같습니다.

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

그러나 64 비트 "2010 Office System 드라이버 베타 : 데이터 연결 구성 요소"를 설치하려고 시도하면 모든 32 비트 Office 응용 프로그램을 제거하지 않고 64 비트 버전을 설치할 수 없음을 알리고 2010 년 32 비트 버전을 설치합니다 Office System 드라이버 베타 : 데이터 연결 구성 요소는 해당 페이지 (및 기타)에서 권장하는 "Microsoft.ACE.OLEDB.14.0"대신 공급자로 "Microsoft.ACE.OLEDB.12.0"을 사용하더라도 초기 문제를 해결하지 못합니다.

내 다음 시도는이 게시물을 따르는 것입니다 :

문제는 OLEDB32.DLL 및 OLEDB32r.DLL이 서버에 등록되지 않았기 때문입니다. 64 비트 버전이 등록 된 경우 등록을 취소하고 대신 32 비트 버전을 등록해야합니다. 이 문제를 해결하려면 % Program Files % / Common Files / System / OLE DB에있는 버전의 등록을 취소하십시오. 그런 다음 동일한 경로이지만 % Program Files (x86) % 디렉토리에 버전을 등록하십시오.

64 비트 컴퓨터에서 JET4.0 및 OLEDB ACE 공급자 모두에게 많은 문제가 발생한 사람이 있습니까? 다른 사람이 없다면 누구나 해결책을 찾았습니까?


  • 여기에 유용한 정보가 있지만, 지금 알고 있듯이,이 작문 스타일은 스택 교환 (stackexchange)을 위해 선호되는 스타일이 아닙니다. 이걸 정리하고 (그리고 아마도 당신을 위해 일한 결과를 업데이트한다면) 기억해두면, 특히 12.0 이후에 버전에 대한 언급이 거의 없기 때문에 질문에 추가 될 것입니다. 네트워크. 또는, 적어도, 나는 업데이 트를 주셔서 감사하겠습니다. - CWilson

1

32 비트 데이터베이스로 64 비트 시스템을 실행 중이고 64 비트 콘솔을 실행하려는 경우 다음 패키지를 시스템에 설치해야한다고 가정합니다.

  1. Microsoft Access 데이터베이스 엔진 2010 x86 설치 재배포 가능,이 설치는 다음에서 제공됩니다.http://www.microsoft.com/download/en/details.aspx?id=13255.
  2. Office 2007의 데이터 연결 구성 요소,이 설치는 이용 가능 :http://www.microsoft.com/download/en/confirmation.aspx?id=23734.
  3. Microsoft Access 데이터베이스 엔진 2010 x64 재배포 가능 파일. 너는 패키지를 로컬에서 다운로드하고 패시브 플래그로 실행해야합니다. 여기에서 설치를 다운로드 할 수 있습니다.http://www.microsoft.com/en-us/download/details.aspx?id=13255'/ passive'플래그와 함께 명령 프롬프트를 사용하여 설치. 에서 명령 프롬프트에서 다음 명령을 실행하십시오. 'AccessDatabaseEngine_x64.exe / passive'

참고 : 주문이 중요해 보입니다. 이미 설치되어있는 것이 있으면 위의 단계를 제거하고 따르십시오.

연결된 질문


관련된 질문

최근 질문