2012-04-09 3 views
2

ADOX Interop에 정말 이상한 문제가 있습니다.ADOX로 Access 데이터베이스를 만들 수 없습니다.

 try 
     { 
      if (File.Exists(path)) 
       File.Delete(path); 

      var cat = new CatalogClass(); 
      cat.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = d:\\Test.mdb; Jet OLEDB:Engine Type=5"); 

      Marshal.ReleaseComObject(cat); 
      cat = null; 
      GC.Collect(); 
     } 
     catch (FileNotFoundException e) 
     { 
      throw new FileNotFoundException("El archivo no se encuentra", e); 
     } 
     catch (COMException e) 
     { 
      throw new COMException(connStr + e.Message); 
     } 
     catch (Exception e) 
     { 
      throw new Exception(connStr, e); 
     } 

코드가 cat.Create() 라인에 실패 :

나는이 코드를 가지고있다. 정말 이상한 것은 내 로컬 개발자 컴퓨터에서 잘 작동하지만 프로덕션 서버에서는 그렇지 않습니다 ... 문제가 발생하기 전에 임의의 파일을 생성하려고했기 때문에 쓰기 권한 문제가 아니며 작업했습니다. 아주. COMException 메시지가 "지정되지 않았습니다. 오류"HResult : -2147467259

서버 OS는 Windows 2008 32 비트입니다. 나는 서버 구성 문제라고 생각 하나, 약간의 빛을 줄 수 있습니까? 나는 무엇을 할 수 있을지 모르겠다. ...

+0

대상 서버가 x64 시스템입니까? AnyCPU 용 애플리케이션을 타겟팅하고 있습니까? – Steve

+0

AnyCPU를 대상으로합니다. –

+0

두 컴퓨터 모두에서 동일한 버전의 ADOX를 사용하고 있습니까? – Steve

답변

3

응용 프로그램을 64 비트 컴퓨터에 배포하면 코드가 JET.OleDB.4.0을 통해 ADOX를 사용할 수 없다.
이 경우, 빠른 솔루션은 대상 아키텍처를 x86으로 변경할 수 있습니다.

그렇지 않은 경우 대상 컴퓨터에 Microsoft Access Database Engine 드라이버의 64 비트 버전을 다운로드하여 설치할 수 있지만 ADOX를 지원하는지는 알 수 없습니다. 또한 연결 문자열을 변경해야합니다

+0

서버 OS는 Windows 2008 32 비트입니다 –

+0

이것은 정답이 아니므로 [이 게시물] (http://meta.stackexchange.com/questions/37738/when-or-should)을 읽은 후 삭제 된 파일을 삭제 취소했습니다. -you-delete-your-incorrect-answer)를 입력하십시오. – Steve

+0

내 하루 저장 –

1

C# 코드 외부에서 ADOX 카탈로그를 사용할 수 있는지 확인하십시오. Access가 설치되어있는 경우 Steve가 제안한대로 Access VBA를 사용해보십시오. Office가 설치되어 있지 않으면 VBScript를 사용해보십시오.

이것은 내 32 비트 Windows 7에서 작동합니다. 64 비트 Windows 7에서는 "클래스가 등록되지 않았습니다"라는 오류와 함께 실패합니다. 나는 당신의 서버가 32 비트라고 대답했기 때문에 그것이 당신의 상황이 아니라는 것을 깨닫는다. 그러나 내 희망은 스크립트가 성공하거나 C# 오류 상태에서 얻은 것보다 유익한 오류 메시지를 줄 것입니다.

'Const cPath = "C:\Users\hans\Documents\Test.mdb" 
Const cPath = "d:\Test.mdb" 
Dim objCat 
Dim strConnect 
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
    "Data Source=" & cPath & ";Jet OLEDB:Engine Type=5" 
WScript.Echo strConnect 

Set objCat = CreateObject("ADOX.Catalog") 
objCat.Create strConnect 
Set objCat = Nothing 

나는 그 파일 AdoxCreateDb.vbs 이름과 명령 프롬프트 창에서 cscript로를 달렸다.

cscript AdoxCreateDb.vbs 
+0

감사합니다. 나는 기회가있을 때 이것을 시도 할 것이다. 오늘 아침 이상하게도 모든 것이 바뀌지 않고 모든 것이 잘 작동합니다 ... –

관련 문제