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

Сендмаилтаск: {34CAEFF9-64BF-401D-B646-C88B705DB971}

Число предупреждений пакета после выполнения пакета: 2

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

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

[1] Тема пуста

Комментарии

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

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

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

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

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

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

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

DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase)

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

Свойства

Current

Получает текущий элемент в коллекции.

Методы

MoveNext()

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

Reset()

Устанавливает перечислитель в его начальное положение, т. е. перед первым элементом коллекции.

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