2017-06-09 14 views
2

私はForeachコンテナのパッケージを持っています。の内部にのForEachコンテナがあります。 Execute Process Taskのエラーにより、OnErrorイベントハンドラForEachコンテナにリダイレクトされます。プロセス実行タスクで使用される変数のロックを解除する| SSIS

私は、タスクのStandardErrorvariableプロパティを使用してONERRORイベントハンドラーに存在するスクリプトタスクでこれを使用して.exeファイルからエラーを捕捉しています。

スクリプトタスクは、この問題を解決する方法

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.

を言って失敗しましたか?

+0

デッドロックを引き起こしている何? –

+0

私は、タスクが処理を実行すると思います変数とスクリプトタスクを解放しないことはアクセスです同じ時間にそれを歌う。そのため、16回の試行後にスクリプトタスクが失敗しています。 –

答えて

0

コードで明示的に変数ロックを管理することで、問題を簡単に解決できます。 (ReadOnlyVariablesReadWriteVariablesプロパティに変数を追加することはありません。

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

参照

+0

@Hadiさんに感謝しますが、結果はもう一度否定的です。スクリプトブロックでtry catchを追加し、上記のコード行を追加しました。私が走ったとき、キャッチブロックで同じ古いデッドロックエラーが発生しました。 ** Execute Process Task **がすべての変数をリリースしたことをどうすれば確認できますか?送信したリンクごとに、変数は解放され、使用時にロックされ、後でロック解除されます。そうです**タスク**はまだそれを使用しているか何か。 –

+0

'execute process task'と' script task' 'Delay validation'プロパティを設定しようとすると、検証フェーズで変数がロックされている可能性があります。 – Hadi

+0

遅延検証をスクリプトタスク... ..itsに追加しても、私はもう一つの事を見ました。私はいくつかのconsole.writeline()をアプリケーションに持っていましたが、** Execute Process Task **の** Process **タブに変数を追加すると、画面がフェードアウトして何も表示されない –

関連する問題