Domanda

Ho una soluzione Visual Studio 2008 con due progetti (un progetto Word-Template e un'applicazione console VB.Net per i test). Entrambi i progetti fanno riferimento a un progetto di database che apre una connessione a un file di database MS-Access 2007 e hanno riferimenti a System.Data.OleDb. Nel progetto di database ho una funzione che recupera una tabella di dati come segue

 private class AdminDatabase
   ' stores the connection string which is set in the New() method
   dim strAdminConnection as string

   public sub New()
   ...
   adminName = dlgopen.FileName
   conAdminDB = New OleDbConnection
   conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
       "Provider=Microsoft.ACE.OLEDB.12.0"

   ' store the connection string in strAdminConnection
   strAdminConnection = conAdminDB.ConnectionString.ToString()
   My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
   ...
   End Sub

   ' retrieves data from the database
   Public Function getDataTable(ByVal sqlStatement As String) As DataTable
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter
        Dim localCon As New OleDbConnection


        localCon.ConnectionString = strAdminConnection

        Using localCon
            Dim command As OleDbCommand = localCon.CreateCommand()
            command.CommandText = sqlStatement
            localCon.Open()
            da.SelectCommand = command
            da.Fill(dt)
            getDataTable = dt
        End Using

    End Function
End Class

Quando chiamo questa funzione dal mio progetto Modello Word 2007, tutto funziona bene; nessun errore. Ma quando lo eseguo dall'applicazione console genera la seguente eccezione

  

ex = {" Il "Microsoft.ACE.OLEDB.12.0"   il provider non è registrato sul   macchina locale. "}

Entrambi i progetti hanno lo stesso riferimento e l'applicazione console ha funzionato quando l'ho scritta per la prima volta (qualche tempo fa) ma ora ha smesso di funzionare. Mi manca qualcosa ma non so cosa. Qualche idea?

È stato utile?

Soluzione

Ho un programma Visual Basic con Visual Studio 2008 che utilizza un database Access 2007 e stava ricevendo lo stesso errore. Ho trovato alcuni thread che consigliavano di cambiare la configurazione di compilazione avanzata in x86 trovata nelle proprietà dei programmi se si esegue un sistema a 64 bit. Finora non ho avuto problemi con il mio programma da allora.

Altri suggerimenti

Fondamentalmente, se si utilizza un computer a 64 bit, IIS 7 non fornisce (per impostazione predefinita) app a 32 bit su cui opera il motore di database. Quindi, ecco esattamente cosa fai:

1) assicurarsi che sia installato il motore di database 2007, che può essere scaricato da: http: // www ? .microsoft.com / downloads / Details.aspx FamilyID = 7554F536-8C28-4598-9B72-EF94E038C891 amp &; displaylang = it

2) apri il gestore IIS7 e apri l'area Pool di applicazioni. Sulla barra laterale destra, vedrai un'opzione che dice & Quot; Imposta valori predefiniti del pool di applicazioni & Quot ;. Fare clic su di esso e verrà visualizzata una finestra con le opzioni.

3) il secondo campo in basso, che dice "Abilita applicazioni a 32 bit" è probabilmente impostato su FALSO per impostazione predefinita. Basta fare clic nel punto in cui si dice "falso" per cambiarlo in "vero".

4) Riavvia il pool di app (puoi farlo premendo RECYCLE anziché STOP, quindi START, che funzionerà anche).

5) fatto e il tuo messaggio di errore sparirà.

Stai eseguendo un sistema a 64 bit con il database a 32 bit ma la console a 64 bit? Non ci sono driver MS Access che eseguono 64 bit e segnalerebbero un errore identico a quello che hai segnalato.


Soluzione:

Questo è tutto! Grazie Arjun Paudel per il link. Ecco la soluzione disponibile su XNA Creator's Club Online. È di Stephen Styrchak.

Il seguente errore mi suggerisce di credere che stai compilando per 64 bit:

  

Il provider "Microsoft .ACE.OELDB.12.0" non è registrato sul computer locale

Non ho un'edizione express ma i seguenti passaggi sono validi in 2008 express?

http://forums.xna.com/forums/t/4377 aspx # 22601

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
- Arjun Paudel


In VC# Express, questa proprietà è mancante, ma puoi comunque creare una configurazione x86 se sai dove cercare.

Sembra un lungo elenco di passaggi, ma una volta che sai dove sono queste cose è molto più semplice. Chiunque abbia solo Configuration Manager probabilmente lo troverà utile. Una volta che conosci Tools -> Options, la prossima volta sarà molto più intuitivo.

1.In VC # Express 2005, vai a "Show all settings".
2. Nell'angolo in basso a sinistra della finestra di dialogo Opzioni, seleziona la casella "Projects and Solutions".
3.Nella vista ad albero sul lato sinistro, selezionare "Show advanced build configuraions.".
4.Nelle opzioni a destra, seleziona la casella OK
5.Fare clic su Build -> Configuration Manager.
6.Vai a "<New...>" ...
7.Nella colonna Piattaforma accanto al progetto, fare clic sulla casella combinata e selezionare "New platform" setting, choose "x86".
8.In Close.
9.Fare clic su <=>.
10.Fare clic su <=>.
Ecco, ora hai una configurazione x86! Facile come una torta! : -)

Consiglio anche di usare <=> per eliminare la piattaforma Any CPU. Non lo vuoi davvero se hai dipendenze su DLL native a 32 bit (anche dipendenze indirette).

Stephen Styrchak | Sviluppatore XNA Game Studio http://forums.xna.com/forums/p/4377/ 22601.aspx # 22601


Ho pensato di intervenire perché ho trovato questa domanda di fronte a un contesto leggermente diverso del problema e ho pensato che potesse aiutare altre anime tormentate in futuro:

Avevo un'app ASP.NET ospitata su IIS 7.0 in esecuzione su Windows Server 2008 a 64 bit.

Poiché IIS ha il controllo del testimone di processo, la soluzione nel mio caso è stata quella di impostare l'impostazione Enable32bitAppOnWin64 su true: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you- can-now-run-32-bit-and-64-bit-application-on-the-same-server.aspx

Funziona in modo leggermente diverso in IIS 6.0 (non è possibile impostare Enable32bitAppOnWin64 a livello di pool di applicazioni) http: //www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true

Sto riscontrando lo stesso problema. Provo a installare Office 2010 a 64 bit su Windows 7 a 64 bit e quindi a installare il driver di Office System 2007: componenti di connettività dei dati.

successivamente, Visual Studio 2008 può aprire una connessione a un file di database MS-Access 2007.

Vedi il mio post su un thread di Exchange Stack simile https://stackoverflow.com/a/21455677/1368849

Avevo installato la versione 15, non 12, che ho scoperto eseguendo questo codice PowerShell ...

(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

... che mi ha dato questo risultato (ho rimosso altre fonti di dati per brevità) ...

SOURCES_NAME              SOURCES_DESCRIPTION                                                                       
------------              -------------------                                                                       
Microsoft.ACE.OLEDB.15.0  Microsoft Office 15.0 Access Database Engine OLE DB Provider

Ho avuto lo stesso errore su una famiglia di Windows Vista a 64 bit completamente aggiornata con un'applicazione .NET che ho compilato solo a 32 bit - il programma è installato nella cartella programx86 su macchine a 64 bit. Non riesce con questo messaggio di errore anche con il provider di database di accesso 2007 installato, con / senza SP2 dello stesso installato, IIS installato e pool di app impostato per il supporto delle app a 32 bit ... Sì, ho provato ogni soluzione ovunque e ancora nessun successo.

Ho cambiato la mia app in ACE OLE DB.12.0 perché JET4.0 non funzionava su macchine a 64 bit - e non è meglio: - / Il thread più promettente che ho trovato è stato questo:

http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/

ma quando si tenta di installare la quot! a 64 bit &; Beta del driver di Office System 2010: Data Connectivity Components " ti dice che non puoi installare la versione a 64 bit senza disinstallare tutte le applicazioni per ufficio a 32 bit ... e installare la versione a 32 bit della versione beta del driver di Office System 2010: i componenti di connettività dei dati non risolvono il problema iniziale, anche con quot;! Microsoft.ACE.OLEDB.12.0 <> quot; come provider anziché " Microsoft.ACE.OLEDB.14.0 " che quella pagina (e altre) raccomandano.

Il mio prossimo tentativo sarà di seguire questo post:

Il problema è dovuto al sapore errato di OLEDB32.DLL e OLEDB32r.DLL registrati sul server. Se le versioni a 64 bit sono registrate, devono essere non registrate, quindi devono essere registrate le versioni a 32 bit. Per risolvere questo problema, annullare la registrazione delle versioni che si trovano in% Programmi% / File comuni / Sistema / OLE DB. Quindi registra le versioni nello stesso percorso ma nella directory% Programmi (x86)%.

Qualcun altro ha avuto così tanti problemi con entrambi i provider ACE JET4.0 e OLEDB su macchine a 64 bit? Qualcuno ha trovato una soluzione se nessuno degli altri funziona?

Suppongo che se si esegue un sistema a 64 bit con un database a 32 bit e si tenta di eseguire una console a 64 bit, i seguenti pacchetti devono essere installati sulla macchina.

  1. Installa il Motore di database di Microsoft Access 2010 x86 Ridistribuibile, questa installazione è disponibile all'indirizzo: http://www.microsoft.com/download/en/details.aspx ? id = 13255 .
  2. Componenti di connettività dati di Office 2007, questa installazione è disponibile a: http://www.microsoft.com/download/en/confirmation.aspx ? id = 23734 .
  3. Motore di database di Microsoft Access 2010 x64 ridistribuibile. Desideri è necessario scaricare il pacchetto localmente ed eseguirlo con un flag passivo. Puoi scaricare l'installazione qui: http://www.microsoft.com/en-us/download /details.aspx?id=13255 Installazione utilizzando il prompt dei comandi con il flag '/ passive'. Nel prompt dei comandi eseguire il comando seguente: "AccessDatabaseEngine_x64.exe / passive"

Nota: l'ordine sembra avere importanza, quindi se hai già installato qualcosa, disinstalla e segui i passaggi precedenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top