Laden...

Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert

Erstellt von mrennen vor 12 Jahren Letzter Beitrag vor 12 Jahren 11.073 Views
M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren
Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert

verwendetes Datenbanksystem: MSSQL + Excel

Hallo,

seit ein Kunde seinen Server umgestellt hat auf Windows 2008 64bit bekommt er beim Einlesen einer Excel Datei die Fehlermeldung "Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert".

Ich könnte die Applikation zwar als x86 kompilieren was den Fehler behebt, dieses ist aber nicht gewünscht da die Applikation mit allen Office und unterschiedlichsten Windows Versionen zusammen arbeiten soll (Teile funktionieren da wirklich nur auf 64bit und werden Modulweise freigeschaltet - wer kein 64bit hat, bekommt also auch Modul xy nicht).

Jetzt geht es wirklich nur um den Import einer Exceldatei mit n Zeilen und bis zu 12 Spalten in ein DataSet. Die restliche Verarbeitung läuft wieder fehlerfrei.

Hat irgendeiner eine Idee wie ich folgenden Block umgehen kann, mit identischem Ergebnis ?


        private void btnImport_Click(object sender, EventArgs e)
        {
            DataSet importData = new DataSet();
            OpenFileDialog ofd = new OpenFileDialog();
            string datei = string.Empty;

            if(ofd.ShowDialog() != DialogResult.OK)
                return;
                
            datei = ofd.FileName;

            if(!File.Exists(datei))
                return;

            try
            {       
                string _lastColPref = string.Empty;
                if (rgOldNew.SelectedIndex == 0)
                    _lastColPref = "K";
                else
                    _lastColPref = "L";

                Excel.ApplicationClass _app = new Excel.ApplicationClass();
                Excel.Workbook _workBook = _app.Workbooks.Open(datei, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                Excel.Worksheet _workSheet = (Excel.Worksheet)_workBook.ActiveSheet;                
                int nInLastRow = _workSheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value).Row;                
                string _sheetName = _workSheet.Name;                

                using (OleDbConnection _oleDB = new OleDbConnection(String.Format("provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties=Excel 8.0", datei)))
                {
                    using (OleDbDataAdapter _cmd = new OleDbDataAdapter(String.Format("SELECT * FROM [{0}$A1:{1}{2}]", new object[] { _sheetName, _lastColPref, nInLastRow }), _oleDB))
                    {
                        _cmd.TableMappings.Add("Table", "TestTable");
                        _cmd.Fill(importData);
                    }
                    _oleDB.Close();
                }

                _workBook.Close(true, null, null);
                _app.Quit();
                releaseObject(_workSheet);
                releaseObject(_workBook);
                releaseObject(_app);

                if (importData.Tables.Count == 0)
                    return;

                grid.DataSource = importData.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

Danke schonmal für eure Mühe

Michael

906 Beiträge seit 2005
vor 12 Jahren

Bitte die Suche nutzen!

Du musst das Programm als x86 anstatt von AnyCPU compilieren, da es keinen 64Bit Jet 4.0 Provider gibt.

3.170 Beiträge seit 2006
vor 12 Jahren

Hallo,

siehe auch Jet for Access, Excel and Txt on 64 bit systems
Das bestätigt auch die Antwort von MagicAndre1981.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
156 Beiträge seit 2010
vor 12 Jahren

[...] Ich könnte die Applikation zwar als x86 kompilieren was den Fehler behebt, dieses ist aber nicht gewünscht [...]

Ist es denn eine Excel 2007 (xslx)-Datei? Dann könntest Du auch die Daten aus der XML im Package auslesen, und könntest auf OleDb verzichten.
Was stehen denn für Daten in der Excel-Datei?
Marko

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren

@MagicAndre1981: die Suche habe ich genutzt und auch per Google stundenlang gesucht. Wie ich jedoch im Startpost geschrieben habe ist das definitiv nicht die Lösung meines Problems.

Ich kann es nicht auf x86 kompilieren da dann diverse Module des Gesamtpaketes nicht mehr funktionieren !!! Es muss schon auf AnyCPU kompiliert werden - der Fehler ist auch erst jetzt mit einem Windows 2008 x64 Server aufgetreten und auch nur beim Import einer Excel Datei in ein DataSet.

Und bezüglich Excel Version - das wird den Standorten nicht vorgeschrieben, es kann also alles von Excel 97 bis Excel 2010 sein.

906 Beiträge seit 2005
vor 12 Jahren

nochmal, es gibt nur 1 Lösung. ALS X86 kompilieren, da es KEINEN 64BIT JET 4.0 Provider gibt.

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren

Das habe ich schon verstanden, kann ich aber dann nicht nutzen und suche eine Alternative ...

Ich habe auch über diesen Provider hier schon einiges gefunden "ACE.OLEDB.12.0". Der soll auch Abwärtskompatibel sein bzgl. Excel

Leider wird der überall nur oberflächlich angekratzt was mich auch nicht wirklich weiter bringt 😦

1.564 Beiträge seit 2007
vor 12 Jahren

Hallo mrennen

Bau dir einen eigenständigen Prozess als x86 Kompilat, der ohne große Logik das Excel-File öffnet und die Daten 1:1 in eine Staging-Tabelle lädt. Dann kann dein eigentlicher Prozess auf der Staging-Tabelle arbeiten, statt auf dem Excel-File.

Es gibt zwar noch die Office-COM Objekte, die du dir anschauen könntest. Die sind aber grottenlahm und, wenn ich mich nicht täusche, ebenfalls nur x86 kompatibel.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

M
mrennen Themenstarter:in
166 Beiträge seit 2008
vor 12 Jahren

Vielen Dank für den Hinweis. Dann werde ich mich da mal einlesen (erstmal suchen) wie ich das bewerkstelligen kann

F
10.010 Beiträge seit 2004
vor 12 Jahren

Wäre es da nicht viiiieeel billiger sich eine der Excel Komponenten von Aspose oder Spreatsheetgear zu kaufen?