Il provider ‘Microsoft.ACE.OLEDB.12.0’ non è registrato sul computer locale.

ogni cosa funziona bene localmente ma questo errore si verifica quando lo pubblico:

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

e traccia dello stack

 [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 

Sto usando il database MS Access 2007 e questa mia stringa di connessione all’interno di web.config

   

eventuali suggerimenti per questo problema

Per la versione 12.0 è necessario installare MDAC 2010 da qui .

Questo deve essere fatto sul server in cui pubblichi la tua applicazione. È necessario installare la versione x86 se la macchina di destinazione è a 32 bit o la versione x64 se la macchina di destinazione è a 64 bit e l’applicazione è costruita con la configurazione Any CPU .

Come suggerito qui È necessario cambiare la piattaforma della soluzione da ” Qualsiasi CPU ” a ” x86 “.

La tua stringa di connessione è corretta, quindi questo errore potrebbe essere causato dal seguente motivo:

  • Se il tuo ufficio è a 32 bit su una macchina a 64 bit e il driver MDAC installato è a 64 bit. In questo caso è necessario installare il driver MDAC a 32 bit per abbinare i binari a 32 bit di Office.

Questo post contiene informazioni dettagliate su come risolverlo.