Freigeben über


DtsEnumerator Klasse

Definition

Definiert eine abstrakte Basisklasse, die die IEnumerator-Methoden implementiert.

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
Vererbung
DtsEnumerator
Abgeleitet
Implementiert

Beispiele

Im folgenden Codebeispiel wird dem Paket dann ein Vorgang hinzugefügt. Die Warnungssammlung wird angezeigt, indem sie eine WarningEnumerator, die von dieser DtsEnumerator Klasse erbt, erstellt und jede Warnungsbeschreibung anzeigt.

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  

Beispielausgabe:

Paketwarnungen zählen vor dem Ausführen: 0

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

Paketwarnungen zählen nach dem Ausführen des Pakets: 2

Die Auflistung enthält die folgenden Werte:

[0] Die Adresse in der Zeile "Aus" wird nicht ordnungsgemäß gebildet. Es fehlt ein @, oder es ist ungültig.

[1] Betreff ist leer

Hinweise

DtsEnumerator ist die Basisschnittstelle für alle Enumeratoren. Dies DtsEnumerator ermöglicht nur das Lesen der Daten in der Sammlung und wird nicht verwendet, um die zugrunde liegende Auflistung zu ändern.

Zu Beginn wird der Enumerator vor das erste Element in der Auflistung positioniert. Reset setzt den Enumerator ebenfalls auf diese Position zurück. An dieser Position löst das Aufrufen Current eine Ausnahme aus. Daher muss der Enumerator durch einen Aufruf von MoveNext auf das erste Element der Auflistung gesetzt werden, bevor der Wert von Current gelesen werden kann.

Current gibt solange dasselbe Objekt zurück, bis MoveNext oder Reset aufgerufen wird. MoveNext legt Current auf das nächste Element fest.

Nach Erreichen des Endes der Auflistung befindet sich der Enumerator hinter dem letzten Element der Auflistung, und ein Aufruf von MoveNext gibt false zurück. Wenn der letzte aufruf, der zurückgegeben falsewerden sollMoveNext, löst der Aufruf Current eine Ausnahme aus. Um Current wieder auf das erste Element der Auflistung festzulegen, können Sie Reset gefolgt von MoveNext aufrufen.

Ein Enumerator bleibt gültig, solange die Auflistung unverändert bleibt. Wenn Änderungen an der Auflistung vorgenommen werden, z. B. Hinzufügen, Ändern oder Löschen von Elementen, wird der Aufzählungsator unaufwendbar ungültig und der nächste Aufruf an MoveNext oder Reset löst eine InvalidOperationException. Wenn die Auflistung zwischen MoveNext und Current geändert wird, gibt Current das Element zurück, auf das der Enumerator gesetzt wurde, auch wenn er bereits ungültig ist.

Der Aufzählerator hat keinen exklusiven Zugriff auf die Sammlung; Daher ist die Aufzählung durch eine Auflistung keine Thread-sichere Prozedur. Selbst wenn eine Auflistung synchronisiert wird, könnte andere Threads die Auflistung weiterhin ändern, wodurch der Aufzählungsator eine Ausnahme ausgelöst wird. Um die Threadsicherheit während der Aufzählung zu gewährleisten, können Sie die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen erfassen, die aus Änderungen von anderen Threads resultieren.

Konstruktoren

DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase)

Initialisiert eine neue Instanz der DtsEnumerator-Klasse.

Eigenschaften

Current

Ruft das aktuelle Element in der Auflistung ab.

Methoden

MoveNext()

Setzt den Enumerator auf das nächste Element der Auflistung.

Reset()

Setzt den Enumerator auf seine anfängliche Position vor dem ersten Element in der Auflistung.

Gilt für: