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() |
Устанавливает перечислитель в его начальное положение, т. е. перед первым элементом коллекции. |