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] Адрес в строке "От" неправильно сформирован. Он отсутствует или недопустим.

[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()

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

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