Linguaggio

DtsEnumerator Classe

Definizione

Definisce una classe base astratta che implementa i metodi 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
Ereditarietà
DtsEnumerator
Derivato
Implementazioni

Esempio

Il seguente esempio di codice aggiunge un'attività a un pacchetto e poi lo esegue. La raccolta degli avvisi viene mostrata creando un WarningEnumerator, che eredita da questa DtsEnumerator classe, e mostra ogni descrizione di avviso.

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  

Output di esempio:

Gli avvisi di pacchetti contano prima di essere eseguiti: 0

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

Gli avvisi del pacco contano dopo l'esecuzione del pacchetto: 2

La collezione contiene i seguenti valori:

[0] L'indirizzo nella linea From non è formato correttamente. Manca un @ o non è valido.

[1] Soggetto vuoto

Commenti

DtsEnumerator è l'interfaccia base per tutti gli enumeratori. Permette DtsEnumerator solo la lettura dei dati nella collezione e non viene utilizzata per modificare la collezione sottostante.

Inizialmente, l'enumeratore viene posizionato prima del primo elemento della raccolta. Reset riporta anche l'enumeratore in questa posizione. In questa posizione, la chiamata Current genera un'eccezione. Pertanto, è necessario chiamare per far avanzare MoveNext l'enumeratore al primo elemento della raccolta prima di leggere il valore di Current.

Current restituisce lo stesso oggetto finché non MoveNext viene chiamato o Reset . MoveNext imposta Current sull'elemento successivo.

Dopo aver passato la fine della raccolta, l'enumeratore viene posizionato dopo l'ultimo elemento della raccolta e la chiamata MoveNext restituisce false. Se l'ultima chiamata a MoveNext restituisce false, la chiamata Current genera un'eccezione. Per impostare Current di nuovo sul primo elemento della raccolta, è possibile chiamare Reset seguito da MoveNext.

Un enumeratore rimane valido finché la raccolta rimane invariata. Se vengono apportate modifiche alla raccolta, ad esempio l'aggiunta, la modifica o l'eliminazione di elementi, l'enumeratore viene invalidato in modo irreversibile e la chiamata successiva a MoveNext o Reset genera un'eccezione InvalidOperationException. Se la raccolta viene modificata tra MoveNext e Current, Current restituirà l'elemento su cui è impostato, anche se l'enumeratore è già invalidato.

L'enumeratore non ha accesso esclusivo alla collezione; Pertanto, enumerare attraverso una collezione non è una procedura thread-safe. Anche quando una raccolta viene sincronizzata, altri thread potrebbero comunque modificare la raccolta, causando la generazione di un'eccezione da parte dell'enumeratore. Per garantire la sicurezza dei thread durante l'enumerazione, puoi bloccare la collezione per tutta l'intera enumerazione o individuare le eccezioni derivanti da modifiche apportate da altri thread.

Costruttori

Nome Descrizione
DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase)

Inizializza una nuova istanza della classe DtsEnumerator.

Proprietà

Nome Descrizione
Current

Ottiene l'elemento corrente nella raccolta.

Metodi

Nome Descrizione
MoveNext()

Sposta l'enumeratore all'elemento successivo della raccolta.

Reset()

Imposta l'enumeratore sulla posizione iniziale, ovvero prima del primo elemento della raccolta.

Si applica a