Benutzer mit den meisten Antworten
Daten aus Excel in MS SQL Server

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.
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]- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 30. Oktober 2014 09:36
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
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
- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 30. Oktober 2014 10:01
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
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
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
Es gibt andere Methoden um Daten in den SQL Server zu laden, z.B. mittles SqlBulkCopy, Beispiel speziell für Excel => SQL Server sind leicht zu finden:
http://www.aspsnippets.com/Articles/Using-SqlBulkCopy-to-import-excel-spreadsheet-data-into-SQL-Server-in-ASPNet-using-C-and-VBNet.aspx
http://www.4guysfromrolla.com/articles/102109-1.aspx
https://snipt.net/aolin/import-excel-data-into-sql-server-using-sqlbulkcopy/
Olaf Helper
[ Blog] [ Xing] [ MVP]- Bearbeitet Olaf HelperMVP Donnerstag, 30. Oktober 2014 15:14
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
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]- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 30. Oktober 2014 09:36
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
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
-
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
- Als Antwort vorgeschlagen Aleksander Chalabashiev Donnerstag, 30. Oktober 2014 10:01
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
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
-
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
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
Es gibt andere Methoden um Daten in den SQL Server zu laden, z.B. mittles SqlBulkCopy, Beispiel speziell für Excel => SQL Server sind leicht zu finden:
http://www.aspsnippets.com/Articles/Using-SqlBulkCopy-to-import-excel-spreadsheet-data-into-SQL-Server-in-ASPNet-using-C-and-VBNet.aspx
http://www.4guysfromrolla.com/articles/102109-1.aspx
https://snipt.net/aolin/import-excel-data-into-sql-server-using-sqlbulkcopy/
Olaf Helper
[ Blog] [ Xing] [ MVP]- Bearbeitet Olaf HelperMVP Donnerstag, 30. Oktober 2014 15:14
- Als Antwort markiert Aleksander Chalabashiev Freitag, 31. Oktober 2014 12:56
-
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.