2017-06-09 29 views
2

我有一個包裝Foreach容器執行處理任務裏面ForEach容器。在執行進程任務中出現一些錯誤時,它會重定向到OnError事件處理程序ForEach Container釋放執行進程任務|中使用的變量的鎖定SSIS

我從.exe文件使用StandardErrorvariable任務的性質,並在腳本任務這是目前在的OnError事件處理程序使用此捕獲錯誤。

腳本任務失敗說

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

我認爲,執行進程任務是不釋放變量和腳本任務是acces同時唱這首歌。所以腳本任務在16次嘗試後失敗。 –

回答

0

您可以通過在代碼中顯式管理變量鎖定來輕鬆解決問題。 (不添加變量ReadOnlyVariablesReadWriteVariables性能。

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

參考

+0

謝謝@Hadi,但結果再次爲負。我在腳本塊中添加了try catch,並添加了上面幾行代碼。當我跑我在catch塊中得到相同的舊死鎖錯誤。我們如何確定** Execute Process Task **已經釋放了它的所有變量。根據您發送的鏈接,變量將被釋放並鎖定在使用狀態並在稍後解鎖。所以它就像**任務**仍在使用它或什麼。 –

+0

嘗試設置執行過程任務和腳本任務延遲驗證屬性=真,變量可能鎖定在驗證階段 – Hadi

+0

不,如果我添加延遲驗證腳本任務..甚至沒有打開腳本窗口調試模式和它的循環..我還觀察了一件事..我有幾個console.writeline()在我的應用程序,但是當我添加任何變量**執行進程任務**的**進程**選項卡,屏幕淡出,沒有任何顯示 –

相關問題