myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Office-Technologien (https://www.mycsharp.de/wbb2/board.php?boardid=73)
--- Microsoft.ACE.OLEDB.12.0 bringt auf einer Maschine, dass der Treiber nicht installiert ist (https://www.mycsharp.de/wbb2/thread.php?threadid=121981)


Geschrieben von oehrle am 23.06.2019 um 07:41:
  Microsoft.ACE.OLEDB.12.0 bringt auf einer Maschine, dass der Treiber nicht installiert ist
Hallo , habe das Problem das ich eine Excel einlesen muss, wie ich das schon oft gemacht habe.
Geht aber nicht, der Treiber sei nicht installiert.
Hane dann eine andere applikation vom mit genommen, dort die Excel eingelesen, voila das geht.

Habe nun schon die OLEDB - Access nachinstalliert, keine Chance, geht nicht. Immer noch gleicher Fehler.
Habe dann die Access2013 RunTime installiert, kein erfolg.

 https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358

Ich habe Office 365 drauf, kann das ein Problem sein (Firmenrechner).

So sieht der Code aus:

C#-Code:
    System.Data.DataTable tblExl = new System.Data.DataTable("Exceldaten");

System.Data.OleDb.OleDbConnection con = null;



            con = new System.Data.OleDb.OleDbConnection();
            con.ConnectionString = "Data Source=" + dateinemaMitPfadExceldatei + ";Provider=Microsoft.ACE.OLEDB.12.0;";
            con.ConnectionString += "Extended Properties=\"Excel 12.0;HDR = Yes;IMEX=1\";";

//// Exceltabelle in Dataset einlesen
            try
            {
                string tableName = "Sheet1$";
                string sql = "SELECT * FROM [" + tableName + "]";

                System.Data.OleDb.OleDbDataAdapter adap = new System.Data.OleDb.OleDbDataAdapter(sql, con);
                adap.Fill(tblExl = new System.Data.DataTable(dateinemaMitPfadExceldatei));





            }
            catch (Exception ex)
            {

            }

Wäre um jeden Tipp dankbar, das ist echt zeitfressend.


Geschrieben von Abt am 23.06.2019 um 18:20:
 
Schau Dir  https://github.com/NetOfficeFw/NetOffice an, das nimmt Dir sowas ab oder verwende direkt OpenXML (wenn möglich).


Geschrieben von oehrle am 24.06.2019 um 05:30:
 
Ok, danke für die Info.

Also wie gesagt, ich könnte das Exel-Sheet auch zeilenweise einlesen, das würde bestimmt gehen.
Nur wenn ich es mit dem DataAdapter einlese, dann habe ich das Problem.

Da hat niemand die Erfahrung wie ich gemacht? Das war eine seht bequeme Art.
Nur komisch das es jetzt in einem neuen Projekt nicht mehr läuft.
Was noch ein Unterschied sein kann: Die neue Entwicklung läuft mit Win10, die vorige wurde unter WIn7 erstellt,damals hatte ich noch Office 2010 auf dem Rechner.
Kann das der Grund sein?


Geschrieben von Stefan.Haegele am 24.06.2019 um 07:10:
 
Hast du dir die Antwort nicht schon selbst gegeben? Du verwendets in deinem Connectstring Excel 12 = Office 2007.


Geschrieben von robbyrc am 24.06.2019 um 09:23:
 
Ist eventuell die 32Bit-Version von Excel oder der Runtime installiert?

Wenn ja - muss deine Applikation auch als x86 in 32 Bit kompiliert werden, da ansonsten der 64-Bit Prozess nicht auf den Treiber zugreifen kann. Das ist auch eine kleine Stolperfalle, gleiches z.B. wenn du per OleDB den JET-Treiber verwenden willst.


Geschrieben von oehrle am 24.06.2019 um 12:46:
 
Hallo, ja habe das auf X86 eingestellt.
Die ältere Applikation arbeitet mit Microsoft.ACE.OLEDB.12.0

Das ist der Punkt warum ich das auch nicht verstehen will. Der QUellcode der älteren Applikation läuft damit, die neue Applikation nicht, und wenn ich 14.0/15.0/16.0 einstelle, kommt der gleiche Fehler.

Office ist als 32-Bit instaliert, laut der Accounteinstellungsinformationen.


Geschrieben von ThomasE. am 25.06.2019 um 10:43:
 
Dieser Link hier  https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358 ist die 64Bit Version, zeigt er mir an wenn ich draufklicke.

Brauchst ja aber die 32er oder täusch ich mich, vielleicht hast du das übersehen?

Hatte auch schon damit gearbeitet, dieses 32 64 bin ich auch drübergestolpert...

SG


Geschrieben von oehrle am 30.06.2019 um 15:32:
  Problem besteht immer noch
Hallo, ich habe mit einem Kollegen aus der IT gesprochen. Problem bei uns: WIr haben Office 365, und wie es aussieht haben wir ein MischMasch aus 32/64 Bit im Office-System. Das würde auch die Probleme erklären.

Hier mal ein Screenshot mit der Abfrage vom Exceltreiber:
C:\Windows\System32\odbcad32

oder mit

C:\Windows\SysWOW64\odbcad32.exe

ist identisch. Der Exceltreiber fehlt, siehe angehängtes Bild.
Link für diese Info:
 Link zum Tipp

Kann ich das irgendwie anders installieren, als mit dem Treiber von Access?
Wo muss der Treiber genau liegen, evtl. kann man das manuell einfügen?


Geschrieben von Abt am 30.06.2019 um 16:05:
 
Zitat von oehrle:
Das würde auch die Probleme erklären.

Nein.
Wenn Deine Anwendung als x86 läuft werden x86 Treiber gesucht.
Läuft sie als x64 eben x64 Treiber. Der Mischmasch ist hier egal, solange das Matching stimmt.

Die Treiber kommen i.d.R. via Redistributable mit; sind also Teil des Office SDKs / Visual Studio Tools for Office.
Solche Schnittstellen werden i.d.R. bei keinem Microsoft Produkt mit einer einfachen Endkundeninstallation mitgeliefert.

Microsoft empfiehlt aber seit über 10 Jahren die Verwendung von Open XML und unterstützt zusätzlich ODF.
Alles problemlos via .NET anzusteuern - ohne ODBC.

Ich wüsste zwar nicht, dass Microsoft mit Office 365 (bzw. im aktuellen 2019er Zyklus) die Unterstützung von ODBC eingestellt hat.
Wenn es so wäre, wäre das eine erfreuliche Nachricht, ein absolut korrekter Schritt und würde ich persönlich auch sehr begrüßen.
Ich hoffe sogar, dass das so wäre.


Geschrieben von oehrle am 30.06.2019 um 22:26:
 
Ja Abt, danke für die Info.
Bei Open XML kann halt nicht einfach das komplette Sheet eingelesen werden, so wie ich das gesehen habe.
So wie ich das gesehen habe immer mit UsedRange, dann die Zeilen und Spalten durchtackern.
Das ist halt mit ODBC deluxe. Sheet einlesen wie eine DataTable, dann sofort im DataGrid anzeigen lassen.
Oder ist diese Funktionalität im OpenXML verborgen?
Office ist so eine Sache, bei jeder neuen Version funktioniert wieder irgend etwas nicht 100 % - tig.
Von dem her denke ich wäre das OpenXML zukunfssicherer.

Habe gerade eben OpenXML eingebunden und eine Tabelle eingelesen, hat geklappt (zeilenweise einlesen). Denke, damit werde ich nun leben müssen, dafür fällt dann halt das Treibergedöns weg.
Bischen umständlicher, aber funktioniert.


Geschrieben von Abt am 30.06.2019 um 22:54:
 
Alles sofort in Speicher laden ist nicht Deluxe - und auch nen DataTable ist nicht Deluxe.
DataTable ist genauso obsolete wie Intertop mit Office: funktioniert zwar noch, aber es gibt in Summe bessere Alternativen.

Absolut zu begrüßen, dass die neuen SDKs (zB. auch die von Datenbanken) ein eingebautes Paging haben und so die Entwickler zwingen ordentlich zu programmieren.
Alles in den Speicher schubsen ist bequem für den Entwickler: bescheiden für den Anwender - und das System.

Zitat:
Office ist so eine Sache, bei jeder neuen Version funktioniert wieder irgend etwas nicht 100 % - tig.

Du sprichst von Software, die einen 3 Jahres-Zyklus hat und von Schnittstellen, für die seit 10 Jahren bessere Alternativen gibt...
Du machst es Dir hier gerade sehr einfach....


Geschrieben von oehrle am 30.06.2019 um 23:12:
  Gelöst - OpenXML verwenden
Also, danke für die Hilfe. OpenXML wirds tun.


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 06.06.2020 12:39