2012-06-24 101 views
29

mọi thứ làm việc tốt tại địa phương nhưng lỗi này xảy ra khi tôi xuất bản nó:Nhà cung cấp 'Microsoft.ACE.OLEDB.12.0' không được đăng ký trên máy cục bộ.

The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. 

và stack trace

[InvalidOperationException: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.] 
System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) +1027372 
System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +337 
System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +86 
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) +31 
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +76 
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +126 
System.Data.OleDb.OleDbConnection.Open() +43 
System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +123 
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +319 
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92 
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1618 
System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +97 
System.Web.UI.WebControls.ListControl.PerformSelect() +34 
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74 
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66 
System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +29 
System.Web.UI.Control.PreRenderRecursiveInternal() +103 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Control.PreRenderRecursiveInternal() +175 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496 

Tôi đang sử dụng MS truy cập cơ sở dữ liệu năm 2007 và nay chuỗi kết nối của tôi trong web.config

 <add name="ConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\OmanLegalDB.accdb;Persist Security Info=True" providerName="System.Data.OleDb"/> 

bất kỳ đề xuất nào cho vấn đề này

Trả lời

37

Đối với phiên bản 12.0, bạn cần cài đặt MDAC 2010 từ here.

Việc này phải được thực hiện trên máy chủ nơi bạn xuất bản ứng dụng của mình. Bạn cần phải cài đặt phiên bản x86 nếu máy mục tiêu là 32 bit hoặc phiên bản x64 nếu máy mục tiêu là 64 bit và ứng dụng của bạn được xây dựng với cấu hình Any CPU.

+0

Tôi nghĩ MDAC nên được cài đặt vì có một db truy cập khác đã được xuất bản trên máy chủ – Kyabroudi

+0

@KhaledYabroudi: Có, nhưng nó phải là phiên bản cũ hơn. Nếu thực sự là năm 2010, hãy xem lại nếu máy là x64 và bản dựng của bạn là 'x86'. Trong trường hợp đó bạn cần phiên bản MDAC x86, không phải x64. –

+0

@ KhaledYabroudi: Theo như tôi biết, có thể cài đặt cả hai phiên bản song song. Vì vậy, đó có lẽ là cách an toàn nhất, để giữ khả năng tương thích cho các ứng dụng hiện có được triển khai ở đó. –

2

chuỗi kết nối của bạn như vậy là hợp nên lỗi này có thể được gây ra bởi lý do sau:

  • Nếu văn phòng của bạn là 32 bit trên một máy 64bit và tài xế MDAC cài đặt là 64bit. Trong trường hợp này, bạn sẽ cần cài đặt trình điều khiển MDAC 32 bit để khớp với các tệp nhị phân Office 32 bit.

Điều này post có thông tin chi tiết về cách khắc phục sự cố.

8

Như đã đề cập trong here Bạn cần thay đổi nền tảng giải pháp từ "Bất kỳ CPU" thành "x86".

+1

Cảm ơn, có thể đã không giúp người hỏi nhưng đã giúp tôi rất nhiều. – Jesse

+0

Sửa lỗi tương tự cho Linqpad (AnyCPU). Sử dụng phiên bản x86 thay thế. –

Các vấn đề liên quan