Ich habe eine Visual Studio 2008-Lösung mit zwei Projekten (ein Word-Template-Projekt und eine VB.Net-Konsolenanwendung zum Testen). Beide Projekte verweisen auf ein Datenbankprojekt, das eine Verbindung zu einer MS-Access 2007-Datenbankdatei herstellt, und verweisen auf System.Data.OleDb. Im Datenbankprojekt habe ich eine Funktion, die eine Datentabelle wie folgt abruft
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
Wenn ich diese Funktion aus meinem Word 2007-Vorlagenprojekt aufrufe, funktioniert alles einwandfrei. keine Fehler. Wenn ich es jedoch über die Konsolenanwendung ausführe, wird die folgende Ausnahme ausgelöst
ex = {"Der Anbieter 'Microsoft.ACE.OLEDB.12.0' ist nicht auf dem lokalen Computer registriert."}
Beide Projekte haben dieselbe Referenz und die Konsolenanwendung hat funktioniert, als ich sie zum ersten Mal geschrieben habe (vor einiger Zeit), aber jetzt funktioniert sie nicht mehr. Ich muss etwas vermissen, aber ich weiß nicht was. Irgendwelche Ideen?
Antworten:
Ich habe ein Visual Basic-Programm mit Visual Studio 2008, das eine Access 2007-Datenbank verwendet und denselben Fehler erhalten hat. Ich habe einige Threads gefunden, die empfohlen haben, die erweiterte Kompilierungskonfiguration in den Programmeigenschaften auf x86 zu ändern, wenn Sie ein 64-Bit-System ausführen. Bisher hatte ich seitdem keine Probleme mit meinem Programm.
quelle
Wenn Sie sich auf einem 64-Bit-Computer befinden, stellt IIS 7 (standardmäßig) keine 32-Bit-Apps bereit, auf denen das Datenbankmodul ausgeführt wird. Also genau das, was Sie tun:
1) Stellen Sie sicher, dass das 2007-Datenbankmodul installiert ist. Dieses kann unter folgender Adresse heruntergeladen werden: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=de
2) Öffnen Sie den IIS7-Manager und den Bereich Anwendungspools. In der rechten Seitenleiste sehen Sie eine Option mit der Aufschrift "Standardeinstellungen für Anwendungspool festlegen". Klicken Sie darauf, und ein Fenster mit den Optionen wird angezeigt.
3) Das zweite Feld mit der Aufschrift "32-Bit-Anwendungen aktivieren" ist wahrscheinlich standardmäßig auf "FALSE" gesetzt. Klicken Sie einfach auf die Stelle, an der "falsch" steht, um sie in "wahr" zu ändern.
4) Starten Sie Ihren App-Pool neu (Sie können dies tun, indem Sie RECYCLE anstelle von STOP und dann START drücken, was ebenfalls funktioniert).
5) fertig, und Ihre Fehlermeldung verschwindet.
quelle
Führen Sie ein 64-Bit-System mit einer 32-Bit-Datenbank, aber einer 64-Bit-Konsole aus? Es gibt keine MS Access-Treiber, die 64-Bit ausführen und einen Fehler melden würden, der mit dem von Ihnen gemeldeten identisch ist.
quelle
Lösung:
Das ist es! Danke Arjun Paudel für den Link. Hier ist die Lösung, wie sie im XNA Creator's Club Online zu finden ist. Es ist von Stephen Styrchak.
Der folgende Fehler lässt vermuten, dass Sie für 64-Bit kompilieren:
Ich habe keine Express Edition, aber sind die folgenden Schritte in Express 2008 gültig?
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
Im
VC# Express
fehlt diese Eigenschaft, aber Sie können trotzdem eine x86-Konfiguration erstellen, wenn Sie wissen, wo Sie suchen müssen.Es sieht aus wie eine lange Liste von Schritten, aber sobald Sie wissen, wo diese Dinge sind, ist es viel einfacher. Jeder, der nur hat,
VC# Express
wird dies wahrscheinlich nützlich finden. Sobald Sie wissenConfiguration Manager
, wird es beim nächsten Mal viel intuitiver sein.1. Gehen Sie in VC # Express 2005 zu
Tools -> Options
.2. Aktivieren Sie in der unteren linken Ecke des Dialogfelds Optionen das Kontrollkästchen ,
"Show all settings"
.3.Wählen Sie in der Baumansicht auf der linken Seite
"Projects and Solutions"
.4.
"Show advanced build configuraions."
Aktivieren Sie in den Optionen auf der rechten Seite das Kontrollkästchen 5.Klicken Sie
OK
.6.Gehen Sie zu
Build -> Configuration Manager
... 7.Klicken Sie inder Spalte Plattform neben Ihrem Projekt auf das Kombinationsfeld und wählen Sie
"<New...>"
.8.In der
"New platform" setting, choose "x86"
.9.Klicken Sie
OK
.10.Klicken Sie
Close
.Dort haben Sie jetzt eine x86-Konfiguration! Einfach wie Torte! :-)
Ich empfehle auch
Configuration Manager
, die Any CPU-Plattform zu löschen. Das wollen Sie wirklich nicht, wenn Sie jemals Abhängigkeiten von nativen 32-Bit-DLLs haben (sogar indirekte Abhängigkeiten).Stephen Styrchak | XNA Game Studio-Entwickler http://forums.xna.com/forums/p/4377/22601.aspx#22601
quelle
Ich dachte, ich würde mich einschalten, weil ich diese Frage vor einem etwas anderen Kontext des Problems fand und dachte, sie könnte in Zukunft anderen gequälten Seelen helfen:
Ich hatte eine ASP.NET-App, die unter IIS 7.0 gehostet wurde und unter Windows Server 2008 64-Bit ausgeführt wurde.
Da IIS die Kontrolle über die Prozessbitness hat, bestand die Lösung in meinem Fall darin, die Einstellung Enable32bitAppOnWin64 auf true zu setzen: http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip- 2-Sie-können-jetzt-32-Bit-und-64-Bit-Anwendungen-auf-demselben-Server ausführen.aspx
In IIS 6.0 funktioniert dies etwas anders (Sie können Enable32bitAppOnWin64 nicht auf Anwendungspoolebene festlegen). Http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx? mfr = wahr
quelle
Ich habe das gleiche Problem. Ich versuche, Office 2010 64-Bit unter Windows 7 64-Bit zu installieren und dann 2007 Office System Driver: Data Connectivity Components zu installieren.
Danach kann Visual Studio 2008 eine Verbindung zu einer MS-Access 2007-Datenbankdatei herstellen.
quelle
Siehe meinen Beitrag in einem ähnlichen Stack Exchange-Thread https://stackoverflow.com/a/21455677/1368849
Ich hatte Version 15 installiert, nicht 12, was ich durch Ausführen dieses PowerShell-Codes herausgefunden habe ...
... was mir dieses Ergebnis gebracht hat (ich habe der Kürze halber andere Datenquellen entfernt) ...
quelle
Ich habe den gleichen Fehler auf einer vollständig aktualisierten 64-Bit-Windows Vista-Familie mit einer .NET-Anwendung, die ich nur auf 32 Bit kompiliert habe - das Programm ist auf 64-Bit-Computern im Ordner programx86 installiert. Diese Fehlermeldung schlägt fehl, selbst wenn der 2007-Zugriffsdatenbankanbieter installiert ist, ohne dass SP2 desselben installiert, IIS installiert und der App-Pool für die 32-Bit-App-Unterstützung eingestellt ist. Ja, ich habe jede Lösung überall ausprobiert und immer noch keinen Erfolg.
Ich habe meine App auf ACE OLE DB.12.0 umgestellt, weil JET4.0 auf 64-Bit-Computern fehlgeschlagen ist - und es ist nicht besser: - / Der vielversprechendste Thread, den ich gefunden habe, war folgender:
http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/
Wenn Sie jedoch versuchen, die 64-Bit-Version "2010 Office System Driver Beta: Datenkonnektivitätskomponenten" zu installieren, werden Sie darauf hingewiesen, dass Sie die 64-Bit-Version nicht installieren können, ohne alle 32-Bit-Office-Anwendungen zu deinstallieren ... und die 32-Bit-Version von 2010 zu installieren Office System Driver Beta: Datenkonnektivitätskomponenten lösen das anfängliche Problem nicht, selbst mit "Microsoft.ACE.OLEDB.12.0" als Anbieter anstelle von "Microsoft.ACE.OLEDB.14.0", das auf dieser Seite (und anderen) empfohlen wird.
Mein nächster Versuch wird sein, diesem Beitrag zu folgen:
Das Problem ist auf die falsche Version von OLEDB32.DLL und OLEDB32r.DLL zurückzuführen, die auf dem Server registriert sind. Wenn die 64-Bit-Versionen registriert sind, müssen sie nicht registriert werden, und stattdessen werden die 32-Bit-Versionen registriert. Um dies zu beheben, heben Sie die Registrierung der Versionen in% Program Files% / Common Files / System / OLE DB auf. Registrieren Sie dann die Versionen unter demselben Pfad, jedoch im Verzeichnis% Program Files (x86)%.
Hat jemand so viele Probleme mit JET4.0- und OLEDB-ACE-Anbietern auf 64-Bit-Computern gehabt? Hat jemand eine Lösung gefunden, wenn keiner der anderen funktioniert?
quelle
Ich gehe davon aus, dass die folgenden Pakete auf dem Computer installiert werden müssen, wenn Sie ein 64-Bit-System mit einer 32-Bit-Datenbank ausführen und versuchen, eine 64-Bit-Konsole auszuführen.
Hinweis: Die Reihenfolge scheint von Bedeutung zu sein. Wenn Sie also bereits etwas installiert haben, deinstallieren Sie es und befolgen Sie die obigen Schritte.
quelle