DtsEnumerator Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 false
viene 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 InvalidOperationException
oggetto . 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. |