Fragensteller
Fehler nach erfolgreichem Excel-Import: Der Schritt hat keine Ausgabe generiert. Der Rückgabewert war unbekannt. Der Prozessexitcode war -529697949

Frage
-
Hallo zusammen,
Excelimporte lassen sich leider nicht vermeiden und verwirrt mich durch sporadische Fehlermeldungen. Die Jobs laufen in VS2019 normal durch, doch wenn ich den Job über den Taskmanager aufrufe erhalte ich den Fehler:
Der Schritt hat keine Ausgabe generiert. Der Rückgabewert war unbekannt. Der Prozessexitcode war -529697949
Die Daten sind zwar drin aber der Job endet mit einer Fehlermeldung wenn ich diesen im SSMS 17 aufrufe. Importiere ich z.Bsp. 20 Datensätze schließt der Job ohne Fehler ab. Interessant ist es auch, dass der Job im Tasksheduler auch den Fehler ausgibt, aber keine Sätze zurückschreibt. Importiert habe ich 130.000 Sätze.
Kennt jemand das Problem, denn es lässt sich nicht konsequent reproduzieren. Es betrifft Quellen mit höherer Anzahl von Datensätzen. Unter 32-bit läuft das Paket gar nicht. Wie kann ich hier bei der weiteren Ursachensuche vorgehen?
- Bearbeitet Controller123 Montag, 3. August 2020 13:49
Alle Antworten
-
Hi,
kann es sein, dass MalwareBytes auf eurem Rechner läuft?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Per Definition ist eine Automatisierung von Office im Hintergrund nicht unterstützt.
Man sollte hier eigentlich nur Task mit "bei angemeldetem User" erstellen.Excel ist u.U. sehr gesprächig mit Dialogboxen/Fehlermeldungen, die in Tasks nicht beantwortet werden können. Dies führt zu ungewöhlichem Verhalten wie z.B. Excel-Prozessleichen, die manuell gekillt werden müssen.
Aber wenn man bestimmte Dinge beachtet, sollte es auch per Task funktionieren.MyExcel = new Excel.Application();
Fehlermeldungen ausblenden:
MyExcel.DisplayAlerts = FalseArbeiten durchführen, dabei darauf achten, dass wirklich keine Fehler auftreten.
Workbook sichern (ggf. vorher killen, da Excel nicht einfach überschreibt sondern eine Meldung ausgeben will, die du ja unterdrücken musst!).Alle Workbooks schließen:
MyExcel.Workbooks.Close();Alle Objektrefrenzen (Sheets, Range, Workbook, usw.) explizit per "Marshal.ReleaseComObject(Object)" freigeben.
Ggf. per "GC.Collect()" den Speicher explizit aufräumen, u.U. mehrfach.
Wenn der Excel-Prozess dann noch läuft, den Prozess definitiv killen:
[DllImport("user32.dll", SetLastError=true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);IntPtr hWnd = MyExcel.hWnd;
GetWindowThreadProcessId(hWnd, out uint processId);
Process process = Process.GetProcessById((int32)processId);
process.Kill();Dann sollte Excel beendet sein.
- Bearbeitet Der Suchende Montag, 3. August 2020 14:13
-
Hallo zusammen,
ich konnte das Ganze ein wenig mehr eingrenzen, aber die großen Dateien bekomme ich trotz der Tipps nicht vernüftig per Job-Agent aus Excel auf den Server. Lokal über DTS-Pakete klappt es. Ich habe daher das Ganze als CSV-Datei zur Verfügung gestellt. Hier gibt es einen Fehler beim 3 Datensatz, der aber wie Datensatz 2 aussieht:
Beschreibung: Fehler beim Verarbeiten der Datei "xxxx.csv" in der Datenzeile 3. Fehlerende Fehler: 2020-09-16 15:41:57.95 Code: 0xC0047038 Quelle: Datenflusstask SSIS.Pipeline Beschreibung: SSIS-Fehlercode "DTS_E_PRIMEOUTPUTFAILED". Die PrimeOutput-Methode in "Flatfilequelle" hat den Fehlercode 0xC0202092 zurückgegeben.
Der Fehler 0xC0202009 und Rowset verfolgt immer wieder. Wenn ich die CSV-Datei als Flatefile über den Verbindungsmanager erstelle erkennt der Editor immer "Zeichenfolge DT_STR 50" und ich weiß nicht wie ich die Felder deklarieren muss wenn ich INT, char und NVARCHAR und datetime-Felder in der Zieltabelle habe und warum er solch einen Mist bei der CSV-Datei erkennt, wenn beim Mandanten immer einen "1" stehe. Selbst Numeric klappt nicht
FRAGE:
Ist der Weg denn über eine CSV-Datei besser als über Excel und wie konvertiere ich richtig?
Könnte ich die Exceldateien nicht auch in Access per Verknüpfung einbinden und dann Access als Link-Server auf dem Server einbetten? Linked-Server-Einbindung ist mir aber per Access bislang auch noch nicht gelungen.Die ETL-Prozesse sind echt ein Krampf und große externe Datenquelle habe ich noch nicht im Griff. Vielen Dank für Tipps.
-
Dem Importtreiber ist es letztlich egal ob CSV oder Excel. Der Treiber ist im Endeffekt immer der selbe.
Allerdings kann man im Verzeichnis der CSV's eine "Schema.ini" anlegen um die Spalten zu definieren.https://docs.microsoft.com/de-de/sql/odbc/microsoft/schema-ini-file-text-file-driver?view=sql-server-ver15
Der Treiber konvertiert dann erheblich besser.
Bei DateTime und Timestamp gibt es immer wieder Nickeligkeiten. Hier sollte das ISO-Format strikt eingehalten werden.