共用方式為


撰寫自訂 Foreach 列舉值的程式碼

在您建立從 ForEachEnumerator 基底類別繼承的類別並將 DtsForEachEnumeratorAttribute 屬性套用到類別之後,必須覆寫屬性的實作及基底類別的方法,以提供自訂功能。

如需自訂列舉值的工作範例,請參閱 Codeplex 網站上的 Integration Services 範例 (英文)。

初始化列舉值

您可以覆寫 InitializeForEachEnumerator 方法,以快取定義在封裝中的連接管理員參考,並快取可用以引發錯誤、警告和參考用訊息的事件介面參考。

驗證列舉值

您覆寫 Validate 方法,以驗證已正確設定的列舉值。如果該方法傳回 Failure,將不會執行列舉值和含有列舉值的封裝。這個方法的實作會隨每個列舉值而有所不同,但是如果列舉值依賴 VariableConnectionManager 物件,就應該加入程式碼以確認提供給該方法之集合中有這些物件。

下列程式碼範例將示範 Validate 的實作,以檢查列舉值屬性中所指定的變數。

private string variableNameValue;

public string VariableName
{
    get{ return this.variableNameValue; }
    set{ this.variableNameValue = value; }
}

public override DTSExecResult Validate(Connections connections, VariableDispenser variableDispenser, IDTSInfoEvents infoEvents, IDTSLogging log)
{
    if (!variableDispenser.Contains(this.variableNameValue))
    {
        infoEvents.FireError(0, "MyEnumerator", "The Variable " + this.variableNameValue + " does not exist in the collection.", "", 0);
            return DTSExecResult.Failure;
    }
    return DTSExecResult.Success;
}
Private variableNameValue As String
 
Public Property VariableName() As String
    Get 
         Return Me.variableNameValue
    End Get
    Set (ByVal Value As String) 
         Me.variableNameValue = value
    End Set
End Property
 
Public Overrides Function Validate(ByVal connections As Connections, ByVal variableDispenser As VariableDispenser, ByVal infoEvents As IDTSInfoEvents, ByVal log As IDTSLogging) As DTSExecResult
    If Not variableDispenser.Contains(Me.variableNameValue) Then
        infoEvents.FireError(0, "MyEnumerator", "The Variable " + Me.variableNameValue + " does not exist in the collection.", "", 0)
            Return DTSExecResult.Failure
    End If
    Return DTSExecResult.Success
End Function

傳回集合

在執行期間,ForEachLoop 容器會呼叫自訂列舉值的 GetEnumerator 方法。在此方法中,列舉值會建立和擴展其項目集合,然後傳回該集合。ForEachLoop 接著會反覆運算集合中的項目,並為集合中的每個項目執行其控制流程。

下列程式碼範例顯示會傳回隨機整數陣列的 GetEnumerator 實作。

public override object GetEnumerator()
{
    ArrayList numbers = new ArrayList();

    Random randomNumber = new Random(DateTime.Now);

    for( int x=0; x < 100; x++ )
        numbers.Add( randomNumber.Next());

    return numbers;
}
Public Overrides Function GetEnumerator() As Object
    Dim numbers As ArrayList =  New ArrayList() 
 
    Dim randomNumber As Random =  New Random(DateTime.Now) 
 
        Dim x As Integer
        For  x = 0 To  100- 1  Step  x + 1
        numbers.Add(randomNumber.Next())
        Next
 
    Return numbers
End Function
Integration Services 圖示 (小) 掌握 Integration Services 的最新狀態

若要取得 Microsoft 的最新下載、文件、範例和影片以及社群中的選定解決方案,請瀏覽 MSDN 或 TechNet 上的 Integration Services 頁面:

若要得到這些更新的自動通知,請訂閱該頁面上所提供的 RSS 摘要。