Язык

DtsEnumerator Класс

Определение

Определяет абстрактный базовый класс, реализующий методы 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
Наследование
DtsEnumerator
Производный
Реализации

Примеры

Следующий пример кода добавляет задачу в пакет, а затем запускает пакет. Коллекция предупреждений отображается путём создания WarningEnumerator, которое наследует от этого DtsEnumerator класса и отображает каждое описание предупреждения.

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  

Пример вывода:

Количество предупреждений о посылках до запуска: 0

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

Количество предупреждений о посылках после запуска пакета: 2

Коллекция содержит следующие значения:

[0] Адрес в строке From сформирован неправильно. Отсутствует @ или он невалиден.

[1] Субъект пуст

Комментарии

DtsEnumerator является базовым интерфейсом для всех переписчиков. Он DtsEnumerator позволяет читать только данные из коллекции и не используется для модификации базовой коллекции.

Изначально перечислитель размещается перед первым элементом в коллекции. Reset также возвращает перечислитель обратно в эту позицию. В этой позиции вызов Current вызывает исключение. Поэтому перед чтением значения MoveNextнеобходимо вызвать Current перечислитель к первому элементу коллекции.

Current возвращает один и тот же объект, пока MoveNextReset не вызывается либо вызывается. MoveNext задает Current для следующего элемента.

После прохождения конца коллекции перечислитель размещается после последнего элемента в коллекции и возвращает вызов MoveNextfalse. Если последний вызов MoveNext возвращен false, вызов Current вызывает исключение. Чтобы снова задать Current для первого элемента коллекции, можно вызвать Reset после этого MoveNext.

Перечислитель остается допустимым, пока коллекция остается неизменной. Если изменения вносятся в коллекцию, например добавление, изменение или удаление элементов, перечислитель неустранимо недопустим, а следующий вызов MoveNext или вызов вызывает ResetисключениеInvalidOperationException. Если коллекция изменяется между MoveNext и Current, Current возвращает элемент, которому он задан, даже если перечислитель уже недопустим.

Переписчик не имеет эксклюзивного доступа к коллекции; поэтому перечисление через коллекцию не является безопасной для потоковой процедуры. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменить коллекцию, что приводит к возникновению исключения перечислителем. Чтобы гарантировать безопасность потоков при перечислении, можно заблокировать коллекцию на протяжении всего перечисления или обнаружить исключения, возникшие из-за изменений, внесённых другими потоками.

Конструкторы

Имя Описание
DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase)

Инициализирует новый экземпляр класса DtsEnumerator.

Свойства

Имя Описание
Current

Возвращает текущий элемент коллекции.

Методы

Имя Описание
MoveNext()

Перемещает перечислитель к следующему элементу коллекции.

Reset()

Задает перечислителю начальную позицию, которая перед первым элементом в коллекции.

Применяется к