言語

DtsEnumerator クラス

定義

IEnumeratorメソッドを実装する抽象的なベースクラスを定義します。

public ref class DtsEnumerator abstract : System::Collections::IEnumerator
public abstract class DtsEnumerator : System.Collections.IEnumerator
type DtsEnumerator = class
    interface IEnumerator
Public MustInherit Class DtsEnumerator
Implements IEnumerator
継承
DtsEnumerator
派生
実装

以下のコード例は、タスクをパッケージに追加し、そのパッケージを実行します。 警告コレクションは、このDtsEnumeratorクラスから継承したWarningEnumeratorを作成することで表示され、各警告の説明が表示されます。

using System;  
using System.Collections.Generic;  
using System.Text;  
using Microsoft.SqlServer.Dts.Runtime;  
using Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask;  

namespace Microsoft.SqlServer.SSIS.Samples  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            Package package = new Package();  
            Console.WriteLine("Package warnings count before running: {0}", package.Warnings.Count);  

            TaskHost taskH2 = (TaskHost)package.Executables.Add("STOCK:SendMailTask");  
            taskH2.FailPackageOnFailure = false;  
            taskH2.FailParentOnFailure = false;  
            Console.WriteLine("SendMailTask: {0}", taskH2.ID);  

            // Test that warnings were successfully added to the collection.  
            package.MaximumErrorCount = 100;  
            package.FailPackageOnFailure = false;  
            package.FailParentOnFailure = false;  
            package.DelayValidation = true;  
            package.Execute();  

            Console.WriteLine("Package warnings count after running the package: {0}", package.Warnings.Count);  

            // Create the enumerator.  
            WarningEnumerator myEnumerator = package.Warnings.GetEnumerator();  
            Console.WriteLine("The collection contains the following values:");  
            int i = 0;  
            while ((myEnumerator.MoveNext()) && (myEnumerator.Current != null))  
                Console.WriteLine("[{0}] {1}", i++, myEnumerator.Current.Description);  
        }  
    }  
}  
Imports System  
Imports System.Collections.Generic  
Imports System.Text  
Imports Microsoft.SqlServer.Dts.Runtime  
Imports Microsoft.SqlServer.Dts.Tasks.ExecuteSQLTask  

Namespace Microsoft.SqlServer.SSIS.Samples  
    Class Program  
        Shared  Sub Main(ByVal args() As String)  
            Dim package As Package =  New Package()   
            Console.WriteLine("Package warnings count before running: {0}", package.Warnings.Count)  

            Dim taskH2 As TaskHost = CType(package.Executables.Add("STOCK:SendMailTask"), TaskHost)  
            taskH2.FailPackageOnFailure = False  
            taskH2.FailParentOnFailure = False  
            Console.WriteLine("SendMailTask: {0}", taskH2.ID)  

            ' Test that warnings were successfully added to the collection.  
            package.MaximumErrorCount = 100  
            package.FailPackageOnFailure = False  
            package.FailParentOnFailure = False  
            package.DelayValidation = True  
            package.Execute()  

            Console.WriteLine("Package warnings count after running the package: {0}", package.Warnings.Count)  

            ' Create the enumerator.  
            Dim myEnumerator As WarningEnumerator =  package.Warnings.GetEnumerator()   
            Console.WriteLine("The collection contains the following values:")  
            Dim i As Integer =  0   
            While (myEnumerator.MoveNext()) &&(myEnumerator.Current <> Nothing)  
                Console.WriteLine("[{0}] {1}",i = Console.WriteLine("[{0}] {1}",i + 1  
            End While  
        End Sub  
    End Class  
End Namespace  

出力例:

実行前のパッケージ警告カウント:0

SendMailTask: {34CAEFF9-64BF-401D-B646-C88B705DB971}

パッケージの警告はパッケージを実行した後にカウントされます:2

コレクションには以下の値が含まれています:

[0] From行のアドレスが正しく形成されていません。 @が欠けているか、有効でない。

[1] 主語は空である

注釈

DtsEnumerator はすべての列挙器の基本インターフェースです。 DtsEnumeratorはコレクション内のデータの読み取りのみを許可し、基礎となるコレクションを変更するためには使用されません。

最初は、列挙子はコレクション内の最初の要素の前に配置されます。 Reset また、列挙子をこの位置に戻します。 この位置で、 Current を呼び出すと例外がスローされます。 したがって、MoveNextの値を読み取る前に、Currentを呼び出して列挙子をコレクションの最初の要素に進める必要があります。

Current は、 MoveNext または Reset が呼び出されるまで、同じオブジェクトを返します。 MoveNext は、 Current を次の要素に設定します。

コレクションの末尾が渡されると、列挙子はコレクション内の最後の要素の後に配置され、 MoveNext を呼び出すと falseが返されます。 MoveNextの最後の呼び出しがfalse返された場合、Current呼び出しは例外をスローします。 Currentをコレクションの最初の要素に再度設定するには、Resetを呼び出し、その後にMoveNextを呼び出します。

列挙子は、コレクションが変更されない限り有効なままです。 要素の追加、変更、削除など、コレクションに変更が加えられた場合、列挙子は回復不能に無効になり、次に MoveNext または Reset 呼び出すと InvalidOperationExceptionがスローされます。 コレクションが MoveNextCurrentの間で変更された場合、列挙子が既に無効になっている場合でも、 Current は設定されている要素を返します。

列挙者はコレクションに対して排他的なアクセス権を持ちません。したがって、コレクションを通じた列挙はスレッドセーフな手順ではありません。 コレクションが同期されている場合でも、他のスレッドがコレクションを変更して、列挙子が例外をスローする可能性があります。 列挙中のスレッド安全性を確保するために、列挙全体を通じてコレクションをロックしたり、他のスレッドによる変更による例外をキャッチしたりできます。

コンストラクター

名前 説明
DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase)

DtsEnumerator クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
Current

コレクション内の現在の要素を取得します。

メソッド

名前 説明
MoveNext()

列挙子をコレクションの次の要素に進めます。

Reset()

列挙子を最初の位置 (コレクション内の最初の要素の前) に設定します。

適用対象