UDL Test on a 64 bit machine
; http://blogs.msdn.com/farukcelik/archive/2007/12/31/udl-test-on-a-64-bit-machine.aspx
오호... 64비트 응용 프로그램을 제작할 때 이것도 주의를 해야겠군요. 아직 32bit OLE DB Provider만 제공되는 경우라면, 부득이하게 32bit exe로 내려가야 할 지도 모르겠습니다.
아래는 제 PC의 32bit OLE DB Provider 목록입니다.
- Microsoft Jet 4.0 OLE DB Provider
- Microsoft Office 12.0 Access Database Engine OLE DB Provider
- Microsoft OLE DB Provider for Analysis Services 9.0
- Microsoft OLE DB Provider For Data Mining Services
- Microsoft OLE DB Provider for ODBC Drivers
- Microsoft OLE DB Provider for OLAP Services 8.0
- Microsoft OLE DB Provider for Oracle
아마도 위의 목록에서, 64bit 공급자가 현재 배포되고 있는 것들이 있을지도 모르지만,,, 어쨌든 프로그램 개발 전에 확인은 꼭 해봐야 할 것 같습니다.
위의 토픽에도 나와 있지만, UDL 파일로 확인해 보는 경우 다음과 같이 명령어 창에서 확인해 볼 수 있습니다.
x64 공급자 확인
- test.udl 파일을 단순히 더블 클릭("C:\Windows\system32\rundll32.exe" "C:\Program Files\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile C:\temp\test.udl)
x86 공급자 확인
- "C:\Windows\syswow64\rundll32.exe" "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile D:\temp\test.udl
아래의 화면은 실제로 제 PC에서 실행해 본 x86 공급자와 x64 공급자 목록입니다.
[그림 1: x86 공급자 목록]
[그림 2: x64 공급자 목록]
예를 들어, 아래와 같은 간단한 프로그램의 경우,
static void Main(string[] args)
{
using (OleDbConnection connection = new OleDbConnection())
{
connection.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Password=\"\";Data Source=C:\\temp\\ASPNetDB.mdb;Persist Security Info=True";
connection.Open();
}
}
위의 프로젝트에 대한 CPU 유형을 x86으로 지정하면 정상적으로 동작을 하겠지만, x64로 지정된 경우에는 다음과 같은 예외를 만나게 됩니다.
System.InvalidOperationException was unhandled
Message="The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine."
Source="System.Data"
StackTrace:
...[생략]...
at System.Threading.ThreadHelper.ThreadStart()
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]