Condividi tramite


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

Nell'esempio di codice seguente viene aggiunta un'attività a un pacchetto e quindi viene eseguito il pacchetto. La raccolta avvisi viene visualizzata creando un WarningEnumeratoroggetto , che eredita da questa DtsEnumerator classe e visualizza ogni descrizione dell'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  

Esempio di output

Conteggio degli avvisi del pacchetto prima dell'esecuzione: 0

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

Conteggio degli avvisi del pacchetto dopo l'esecuzione del pacchetto: 2

L'insieme contiene i valori seguenti:

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

[1] Il soggetto è vuoto

Commenti

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

Inizialmente l'enumeratore è posizionato davanti al primo elemento della raccolta. Anche il metodo Reset riporta l'enumeratore in questa posizione. In questa posizione, la chiamata Current genera un'eccezione. Pertanto, è necessario chiamare il metodo MoveNext per spostare in avanti l'enumeratore, in corrispondenza del primo elemento della raccolta, prima di leggere il valore di Current.

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

Una volta raggiunta la fine della raccolta, l'enumeratore sarà posizionato dopo l'ultimo elemento, pertanto la chiamata al metodo MoveNext restituisce false. Se l'ultima chiamata a MoveNext restituita falseviene Current generata un'eccezione. Per impostare nuovamente la proprietà Current sul primo elemento della raccolta, è possibile chiamare il metodo Reset seguito da MoveNext.

Un enumeratore rimane valido finché la raccolta rimane invariata. Se le modifiche vengono apportate all'insieme, 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 InvalidOperationExceptionoggetto . Se la raccolta viene modificata tra la chiamata del metodo MoveNext e la proprietà Current, la proprietà Current restituirà l'elemento su cui è stata impostata, anche se l'enumeratore risulta già invalidato.

L'enumeratore non ha accesso esclusivo alla raccolta; pertanto, l'enumerazione tramite una raccolta non è una procedura thread-safe. Anche quando una raccolta viene sincronizzata, altri thread potrebbero comunque modificare la raccolta, che causa la generazione di un'eccezione da parte dell'enumeratore. Per garantire la sicurezza dei thread durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione o rilevare le eccezioni che derivano dalle modifiche apportate da altri thread.

Costruttori

DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase)

Inizializza una nuova istanza della classe DtsEnumerator.

Proprietà

Current

Ottiene l'elemento corrente della raccolta.

Metodi

MoveNext()

Sposta l'enumeratore all'elemento successivo della raccolta.

Reset()

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

Si applica a