2017-06-09 2 views
2
SSIS

Ich habe ein Paket mit einem Foreach Container und Execute Prozessaufgabe innen FürJeden Container. Bei einem Fehler in Execute Process Task wird er an OnError Event-Handler von ForEach Container umgeleitet.Sperre für Variablen freigeben, die in Ausführen der Prozessaufgabe | verwendet werden

Ich Erfassung der Fehler von .exe mit StandardErrorvariable Eigenschaft der Aufgabe und mit diesem im Skript Aufgabe, die in OnError Event-Handler vorhanden ist.

Das Script Task nicht sagen

Error: A deadlock was detected while trying to lock variable "User::ErrorExcelName, User::ErrorFolder, User::ErrorMessage, User::FileName" for read access. A lock could not be acquired after 16 attempts and timed out.

Wie dieses Problem beheben?

+0

Was den Stillstand verursacht? –

+0

Ich denke, der Prozess ausführen Aufgabe ist Das Freigeben der Variablen und des Skripts ist kein Zugriff singe es gleichzeitig. Die Skriptaufgabe ist nach 16 Versuchen fehlgeschlagen. –

Antwort

0

Sie können das Problem einfach lösen, indem Sie die Variablensperrung explizit im Code verwalten. (Nicht Variablen ReadOnlyVariables und ReadWriteVariables Eigenschaften hinzufügen.

string strFilename; 
Variables lockedVariables = null; 
Dts.VariableDispenser.LockOneForRead("FileName", ref lockedVariables); 
strFilename = lockedVariables["FileName"].Value; 
lockedVariables.Unlock(); 

Referenzen

+0

Danke @Hadi, aber das Ergebnis ist wieder negativ. Ich habe try catch in den Skriptblock eingefügt und die obigen paar Codezeilen hinzugefügt. Wenn ich rannte, bekomme ich den gleichen alten Deadlock-Fehler im catch-Block. Wie können wir sicher sein, dass ** Execute Process Task ** alle Variablen veröffentlicht hat? Gemäß den Links, die Sie gesendet haben, werden Variablen freigegeben und gesperrt, verwendet und später entsperrt. So ist es wie ** Aufgabe ** verwendet es noch oder was. –

+0

Versuchen Sie, die 'Prozess ausführen Aufgabe' und 'Skript Aufgabe' 'Delay Validierung' Eigenschaft = True, Variable kann Sperre in Validierungsphase sein – Hadi

+0

Nein, wenn ich Verzögerung Validierung Skriptaufgabe hinzufügen ..Its nicht sogar das Skriptfenster in Debug zu öffnen Modus und seine Schleife .. Ich beobachtete eine weitere Sache .. Ich habe ein paar console.writerine() 's in meiner App, aber wenn ich eine Variable hinzufügen, um die ** Prozess ** Registerkarte von ** Execute Process Task **, die Der Bildschirm wird ausgeblendet und nichts wird angezeigt –

Verwandte Themen