DtsEnumerator Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Définit une classe de base abstraite qui implémente les méthodes 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
- Héritage
-
DtsEnumerator
- Dérivé
- Implémente
Exemples
L’exemple de code suivant ajoute une tâche à un package, puis exécute le package. La collection d’avertissements est affichée en créant un WarningEnumerator, qui hérite de cette DtsEnumerator classe et affiche chaque description d’avertissement.
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
Exemple de sortie :
Nombre d’avertissements de package avant d’exécuter : 0
SendMailTask : {34CAEFF9-64BF-401D-B646-C88B705DB971}
Nombre d’avertissements de package après l’exécution du package : 2
La collection contient les valeurs suivantes :
[0] L’adresse de la ligne From n’est pas correctement formée. Il manque un @ ou il n’est pas valide.
[1] L’objet est vide
Remarques
DtsEnumerator est l’interface de base de tous les énumérateurs. L’option DtsEnumerator autorise uniquement la lecture des données dans la collection et n’est pas utilisée pour modifier la collection sous-jacente.
Au départ, l'énumérateur est positionné avant le premier élément de la collection. Reset replace également l'énumérateur à cette position. À cette position, l’appel Current lève une exception. Par conséquent, vous devez appeler MoveNext pour avancer l'énumérateur jusqu'au premier élément de la collection avant de lire la valeur de Current.
Current retourne le même objet tant que MoveNext ou Reset n'est pas appelé. MoveNext affecte l'élément suivant à Current.
Une fois la collection terminée, l’énumérateur est placé après le dernier élément de la collection et l’appel à MoveNext retourne la valeur false
. Si le dernier appel à MoveNext retourner false
, l’appel Current lève une exception. Pour attribuer une nouvelle fois Current au premier élément de la collection, vous pouvez appeler Reset suivi de MoveNext.
Un énumérateur reste valide aussi longtemps que la collection demeure inchangée. Si des modifications sont apportées à la collection, comme l’ajout, la modification ou la suppression d’éléments, l’énumérateur est irrécupérablement invalidé et l’appel suivant à MoveNext ou Reset lève un InvalidOperationException
. Si la collection est modifiée entre MoveNext et Current, Current retourne l'élément auquel il est attribué, même si l'énumérateur est déjà invalidé.
L’énumérateur n’a pas accès exclusif à la collection; par conséquent, l’énumération via une collection n’est pas une procédure thread-safe. Même lorsqu’une collection est synchronisée, d’autres threads peuvent toujours modifier la collection, ce qui entraîne la levée d’une exception par l’énumérateur. Pour garantir la sécurité des threads pendant l’énumération, vous pouvez verrouiller la collection pendant toute l’énumération ou intercepter les exceptions résultant des modifications apportées par d’autres threads.
Constructeurs
DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase) |
Initialise une nouvelle instance de la classe DtsEnumerator. |
Propriétés
Current |
Obtient l’élément actuel dans la collection. |
Méthodes
MoveNext() |
Avance l’énumérateur à l’élément suivant de la collection. |
Reset() |
Rétablit l’énumérateur à sa position initiale, qui précède le premier élément de la collection. |