none
Daten aus Excel in MS SQL Server RRS feed

  • Frage

  • Hallo,

    Ich versuche nun seit geraumer Zeit mein Programm so hinzubekommen, dass es Daten von Excel direkt in meine MS SQL Datenbank speichert. - Leider scheitert es immer wieder.

    Query = @"select * into Artikel from OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;DATABASE=C:\Users\****\Desktop\Import\Artikel.xlsx', '[Tabelle1$]')";

    Als Fehlermeldung gibt er mir raus, dass OleDB 4.0 keine Instanz für den Verbindungsserver '(null)' erstellen kann.

    Funktioniert das überhaupt so? - Welche alternativen habe ich da? (Über Access würde ich ungerne gehen)

    Danke im Voraus,
    DasNeo.

    Donnerstag, 30. Oktober 2014 08:35

Antworten

Alle Antworten

  • Hallo,

    erstes Problem ist, das die Datei in Deinem Profilordner liegt, wo von den Berechtigungen her eigentlich nur Du Zugriff darauf hast. Hier soll aber der SQL Server die Datei lesen und dafür werden die Rechte fehlen. Leg die Datei besser in einem Ordner ab, wo der SQL Server Service Account auch Leserechte hat.

    Hast Du ein 64 Bit OS? Dort steht der alte JET Datenprovider nicht zur Verfügung, Du musst stattdessen den neueren ACE verwenden => Microsoft Access Database Engine 2010 Redistributable


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 30. Oktober 2014 09:06
  • Hallo, 

    danke erstmal für deine schnelle Antwort. Genügt es, wenn ich in der Ordner-Freigabe einstelle, dass "Jeder" das Rechts zum Lesen hat?

    Gruß,
    DasNeo.

    €dit:

    Habe nun "Microsoft.ACE.OLEDB.12.0" verwendet und er gibt mir den gleichen Fehler aus.


    • Bearbeitet DasNeo Donnerstag, 30. Oktober 2014 09:18
    Donnerstag, 30. Oktober 2014 09:14
  • Hallo,

    für das XLSX Format muss Du als Format Excel 12.0 Xml angeben, siehe:

    https://www.connectionstrings.com/excel-2013/

    Lege die Datei in einen gemeinsamen öffentlichen Ordner, anstatt in einen Benutzer-Ordner.

    OPENROWSET - siehe Abschnitt Berechtigungen - verwendet die Benutzerberechtigungen, die für die Verbindung gelten.

    Gruß Elmar

    Donnerstag, 30. Oktober 2014 09:44
    Beantworter
  • Hallo,

    "Die Berechtigungen für OPENROWSET werden anhand der Berechtigungen des an den OLE DB-Anbieter übergebenen Benutzernamens bestimmt.Für die Verwendung der Option BULK ist die ADMINISTER BULK OPERATIONS-Berechtigung erforderlich."

    Was genau ist damit gemeint und wie stelle ich das ein?

    €dit:
    Auch mit Excel 12.0 Xml erhalte ich die gleiche Fehlermeldung.

    • Bearbeitet DasNeo Donnerstag, 30. Oktober 2014 12:37
    Donnerstag, 30. Oktober 2014 12:32
  • Hallo,

    das Thema hat wir vor kurzem, siehe OPENROWSET ( .... BULK) schlägt fehl

    wobei bei Dir die besonderen Berechtigung für BULK nicht gilt.

    Aber die Hinweise bei OPENROWSET bezüglich - ohne das funktioniert kein Provider mit OPENROWSET.

    Zudem musst Du den passenden Provider zum SQL Server installiert haben. Bei einem 64-Bit SQL Server den 64-Bit ACE Provider, bei einem 32-Bit SQL Server den 32-Bit ACE Provider - und nur einer von beiden kann zu gleicher Zeit installiert sein.

    Gruß Elmar

    Donnerstag, 30. Oktober 2014 12:50
    Beantworter
  • Hallo,

    ich bin leicht verwirrt. - Gäbe es eine einfachere und schnellere Möglichkeit, als mit Openrowset? Das ganze muss nämlich morgen fertig sein. 

    Danke,
    DasNeo.

    Donnerstag, 30. Oktober 2014 14:32
  • Donnerstag, 30. Oktober 2014 15:14
  • Hallo,

    danke für deine Antwort. - Ich habe das ganze nun probiert mit BulkCopy. Das Problem, an welchem ich nun hänge ist folgendes: 

    Mein Connection-String:

    "Data Source=MEINPC1;" +
    "UID=sa;" +
    "Password=pswd;" +
    "Database=DEMO";

    Das Problem ist, dass OleDB jetzt sagt, dass ich keinen Provider angegeben habe. Wie kann ich dort drin jetzt noch einen Provider einstellen? Wenn das nicht geht, wie komme ich über den anderen Connection String(wie auf den Beispielen beschrieben) an meine Datenbank?

    Gruß,
    DasNeo.

    Freitag, 7. November 2014 09:39