2013-10-24 142 views
1

我有一個文件,我想與我在數據庫中使用SSIS項目的條目進行比較。SSIS變量超出範圍

在我的ControlFlow中,我有'執行SQL任務',它從我的'腳本任務'中想要比較的數據庫中獲取結果列表。還有其他的東西在這裏發生,我不知道,但有達到我的'腳本任務'之前有循環。

它運行良好,我第一次運行它,但一旦它嘗試文件中的第二個條目,它會丟失數據庫結果。我可以通過填寫PreExecute)每次進入在ControlFlow循環一次,我失去了在this.Variables.AccountFilterVariables舉行成果數據庫結果(

private DataTable dt = new DataTable(); 

public override void PreExecute() 
{ 
    base.PreExecute(); 

    OleDbDataAdapter adapter = new OleDbDataAdapter(); 
    //filling results from database into DataTable object 
    adapter.Fill(dt, this.Variables.AccountFilterVariables); 

} 

,但現在要解決這個問題

我可以通過將「執行SQL任務」放入循環來修復此問題,但我不希望它每次都查詢數據庫基礎。我只想查詢一次數據庫並在項目的整個生命週期中保存this.Variables.AccountFilterVariables。

我該怎麼做?我猜它與PostExecute()有關,但我不確定是什麼。

Control FLow

Data Flow

+0

你可以彈出涉及的控制流和數據流的截圖嗎?我想我知道你在做什麼,但一張圖片會固化 – billinkc

+0

似乎我需要更高的聲譽來上傳照片,但這是一個鏈接到我的ControlFlow http://i.stack.imgur.com/HFgf8.jpg DataFlow http ://i39.tinypic.com/24zg9r5.jpg – Eamonn

回答

0

如果我沒有記錯,由執行SQL任務創建的記錄是forward-only遊標類型,這意味着你只能通過它讀取一次。

一個簡單的解決方法是在執行SQL任務後立即添加一個腳本任務。在該腳本任務中,使用記錄集加載DataTable並將該DataTable存儲在另一個程序包範圍變量中。然後,在各種循環中,腳本組件可以引用DataTable,默認情況下允許向前和向後尋找。

有關示例代碼,請參閱我對SSIS recordset in script task: cannot use it with subsequent rows的回答。