Tham chiếu đến các bit Access Interop
không liên quan gì đến ngoại lệ của bạn và Access Interop không cần thiết để sử dụng các lớp trong System.Data.OleDb
.
Sự cố phát sinh khi bạn đã biên dịch ứng dụng cho AnyCPU Platform
, bạn đang chạy trên hệ thống 64 bit và nhà cung cấp ADO.NET đã cài đặt (Microsoft ACE.OLEDB.12.0) là phiên bản 32 bit.
Khi sử dụng mục tiêu AnyCpu
Nền tảng mã của bạn sẽ được thực thi dưới dạng mã 64 bit trên hệ thống 64 bit và mã 32 bit trên hệ thống 32 bit. Một ứng dụng được thực hiện dưới dạng 64bit không thể sử dụng trình điều khiển 32 bit (và ngược lại). Bây giờ thêm vào sự pha trộn một thực tế là Microsoft.ACE.OLEDB.12.0 có hai phiên bản khác nhau. Một cho 64bit và một cho 32bit và chúng không thể được cài đặt cùng nhau trên cùng một máy.
Cách giải quyết đơn giản nhất là thay đổi Nền tảng mục tiêu của ứng dụng của bạn thông qua trình đơn Visual Studio
BUILD -> Configuration Manager -> Active Solution Platform -> x86
Nếu tùy chọn x86
không phải là đã có, sau đó chọn MỚI, tên nó x86
, Copy Settings from AnyCPU
và kiểm tra Create new project platforms
Nếu bạn nghĩ rằng việc sử dụng ứng dụng 32 bit trên Hệ điều hành 64bit là mất hiệu suất hoặc điều gì đó cần tránh thì hãy suy nghĩ hai lần và đọc this reference trong đó PRO và CONS của AnyCpu được kiểm tra một cách nghiêm ngặt. Nếu bạn không có lý do cụ thể để sử dụng AnyCpu
thì tốt hơn là ở lại với x86
.
Tất nhiên, một tùy chọn khác là gỡ cài đặt phiên bản 32 bit và cài đặt phiên bản 64bit của ACE from here và sau đó chạy ứng dụng của bạn dưới dạng AnyCpu trên hệ thống 64 bit. Nhưng đây có thể là một cơn ác mộng đối với các kịch bản triển khai của bạn. Điều gì sẽ xảy ra nếu phiên bản Microsoft Office 32bit được cài đặt trên máy mục tiêu x64 của bạn?Office cài đặt phiên bản tương thích bit của ACE và, như đã nói, không thể cài đặt 32 bit và 64 bit ACE trên cùng một máy.
Bây giờ bạn cũng nên yêu cầu khách hàng của bạn cài đặt lại Office làm 64bit để giữ cho ứng dụng 64bit của bạn vui vẻ.
CẬP NHẬT
Tình hình đã thay đổi một chút với các phiên bản mới nhất của Visual Studio. Hiện tại có một tùy chọn mới là mặc định cho các dự án mới. Nó được gọi là
AnyCPU Ưu tiên chế độ 32 bit. Xem thêm chi tiết tại liên kết này:
What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11 và một bài thú vị (mặc dù về Sql Server Compact) là này một
The trouble with Any CPU–Prefer 32 bit–BadImageFormatException
Cảm ơn bạn đã trả lời có giá trị. Hệ điều hành của tôi là Windows 7 64 bit.Vui lòng xem câu hỏi đã chỉnh sửa của tôi Tôi thêm một hình ảnh trong cấu hình Batch Build –
Không xây dựng hàng loạt, sử dụng Trình quản lý cấu hình và đặt Nền tảng giải pháp tích cực là x86 – Steve
Nhưng nó có hoạt động trên cả hai nền tảng không. bit OS. –