Đối với tất cả những người vẫn bị ảnh hưởng bởi điều này.
Tôi đã nhận được lỗi ...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
... theo mô tả của OP, Shailesh Sahu.
Tôi có Windows 7 64 bit.
Vấn đề của tôi nằm trong các tập lệnh PowerShell , nhưng đang sử dụng chuỗi kết nối, tương tự như bài đăng của OP, vì vậy, hy vọng những phát hiện của tôi có thể được áp dụng cho C #, PowerShell và bất kỳ ngôn ngữ nào khác dựa trên trình điều khiển "Microsoft.ACE.OLEDB".
Tôi đã làm theo hướng dẫn về chủ đề diễn đàn MS này: http://goo.gl/h73RmI
Trước tiên tôi đã thử cài đặt phiên bản 64 bit , sau đó cài đặt phiên bản 32 bit của AccessDatabaseEngine.exe từ trang này
http://www.microsoft.com/en-us/doad/details.aspx?id=13255
Nhưng vẫn không có niềm vui.
Sau đó tôi đã chạy mã bên dưới trong PowerShell (từ trang web của SQL Panda http://goo.gl/A3Hu96 )
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
... đã cho tôi kết quả này (Tôi đã xóa các nguồn dữ liệu khác để lấy ngắn gọn) ...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
Như bạn thấy, tôi có Microsoft.ACE.OLEDB. 15 .0 (mười lăm) không phải Microsoft.ACE.OLEDB. 12 .0 (mười hai)
Vì vậy, tôi đã sửa đổi chuỗi kết nối của mình thành 15 và nó đã hoạt động.
Vì vậy, một đoạn PowerShell nhanh để trình bày cách mã hóa phiên bản ...
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
sửa đổi để chọn phiên bản ACE mới nhất, nếu có nhiều hơn một
Hy vọng, bất cứ ai tìm thấy điều này bây giờ đều có thể kiểm tra xem phiên bản OLEDB nào được cài đặt và sử dụng số phiên bản phù hợp.