2017-03-09 92 views
2

在腳本組件[Input0_ProcessInputRow]中,我試圖讀取「ReadWrite」全局變量值並拋出錯誤。無法在SSIS的腳本組件中獲取「ReadWrite」變量值

錯誤:

The collection of variables locked for read and write access is not available outside of PostExecute.

下面是我的代碼

If Row.Column13 = "C" Then 
    Variables.mTotalCreditCount = Variables.mTotalCreditCount - 1 
    Variables.mTotalCreditAmount = Variables.mTotalCreditAmount - CDbl(Row.Column14) 

ElseIf Row.Column13 = "D" Then 
    Variables.mTotalDebitCount = Variables.mTotalDebitCount - 1 
    Variables.mTotalDebitAmount = Variables.mTotalDebitAmount - CDbl(Row.Column14) 

End If 

我也試圖讀取局部變量的值,然後分配給全局變量在PostExecute(),如下。沒有運氣

If Row.Column13 = "C" Then 

    mTotalCrCnt = Variables.mTotalCreditCount - 1 
    mTotalCrAmt = Variables.mTotalCreditAmount - CDbl(Row.Column14) 
ElseIf Row.Column13 = "D" Then 

    mTotalDbCnt = Variables.mTotalDebitCount 
    mTotalDbCnt = mTotalDbCnt - 1 
    mTotalDbAmt = Variables.mTotalDebitAmount 
    mTotalDbAmt = mTotalDbAmt - CDbl(Row.Column14) 
End If 

Public Overrides Sub PostExecute() 
    MyBase.PostExecute() 
    Variables.ProcessCount = intProcessCount 
    Variables.mTotalCreditCount = mTotalCrCnt 
    Variables.mTotalCreditAmount = mTotalCrAmt 
    Variables.mTotalDebitCount = mTotalDbCnt 
    Variables.mTotalDebitAmount = mTotalDbAmt 
End Sub 

請幫忙嗎?

+0

我嘗試這樣做,現在能夠訪問。 http://stackoverflow.com/questions/13450289/how-to-access-ssis-package-variables-inside-script-component – VHK

+0

http://stackoverflow.com/questions/13450289/how-to-access- ssis-package-variables-inside-script-component – VHK

+1

我有類似的問題,但不知道如何解決它?你提供了一個鏈接,但我沒有接受這個頁面上的答案,他們是相似的!你能給我們一個答案嗎?或者接受提供的答案,如果它是你所嘗試的? – Yahfoufi

回答

2

尋找你的評論它看起來你已經解決了這個問題,但我發佈了這個答案,以提供有關如何在SSIS腳本中處理變量以及如何解決類似問題的信息,因此它可以幫助其他用戶

SSIS變量可以在所有SSIS組件和容器一起使用

變量存儲值。

「Integration Services支持兩種類型的變量:用戶定義的變量和系統變量,用戶定義的變量由程序包開發人員定義,系統變量由Integration Services定義,您可以創建任意數量的用戶定義變量作爲一個軟件包的要求,但是你不能創建額外的系統變量。「More info in this MSDN article

在腳本組件中使用變量

每個腳本都有可以在腳本頁面上定義一個ReadOnlyVariablesReadWriteVariables列表。

ReadOnlyVariables

ReadOnlyVariables可以從所有腳本子的訪問,他們是Read-Only,因爲他們的名字命名。

ReadWriteVariables

「ReadWriteVariables的收集只在PostExecute方法來最大限度地提高性能和減少鎖定衝突的風險提供。因此,你不能直接增加一個包變量的值,你處理每個數據行增加一個局部變量的值,並在處理所有數據後,將包變量的值設置爲PostExecute方法中局部變量的值,也可以使用VariableDispenser屬性來解決這個問題但是,如果每行都被處理,則直接寫入包變量將會對性能產生負面影響增加鎖定衝突的風險。「More in this MSDN article

方法與變量工作

有3種方法與變量的工作:

  1. 將在腳本頁面選擇它們作爲ReadOnlyVariablesReadWriteVariables後直接訪問它們
  2. 使用變量分配器(LockForReadLockForWrite種方法)

    IDTSVariables100 vars = null; 
    VariableDispenser.LockForRead("User::MyVariable"); 
    VariableDispenser.GetVariables(vars); 
    string TaskName = vars("User::MyVariable").Value.ToString(); 
    vars.Unlock(); 
    
  3. 使用SSIS日誌記錄任務:讀取變量,並將它們記錄到執行日誌,消息框或文件

有很多文章談到這個方法,你可以參考他們瞭解更多