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() |
Задает перечислителю начальную позицию, которая перед первым элементом в коллекции. |