2012-06-24 58 views
29

ogni cosa funziona bene a livello locale, ma questo errore si verifica quando lo pubblico:Il provider 'Microsoft.ACE.OLEDB.12.0' non è registrato sul computer locale.

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

e lo 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 

sto utilizzando MS database di Access 2007 e questo la mia stringa di connessione nel 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"/> 

qualche suggerimento per questo problema

risposta

37

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

Questo deve essere fatto sul server in cui si pubblica l'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.

+0

Penso che MDAC debba essere installato perchè c'è un altro accesso db già pubblicato sul server – Kyabroudi

+0

@KhaledYabroudi: Sì, ma deve essere una versione precedente. Se è effettivamente il 2010, controlla se la macchina è x64 e la tua build è 'x86'. In tal caso è necessaria la versione MD86 x86, non x64. –

+0

@KhaledYabroudi: Per quanto ne so, è possibile installare entrambe le versioni side-by-side. Quindi questo è probabilmente il modo più sicuro, al fine di mantenere la compatibilità per le app esistenti distribuite lì. –

2

la stringa di connessione è di destra in modo da questo errore potrebbe essere causato da seguente motivo:

  • se il vostro ufficio è a 32 bit su un computer a 64 bit e driver di 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 ha informazioni dettagliate su come risolverlo.

8

Come suggerito in here è necessario modificare la piattaforma di soluzioni da "Qualsiasi CPU" a "x86".

+1

Grazie, potrebbe non aver aiutato il richiedente ma mi ha aiutato molto. – Jesse

+0

Anche la stessa correzione per Linqpad (AnyCPU). Utilizzare invece la versione x86. –

Problemi correlati