DtsEnumerator Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Define uma classe base abstrata que implementa os métodos 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
- Herança
-
DtsEnumerator
- Derivado
- Implementações
Exemplos
O exemplo de código a seguir adiciona uma tarefa a um pacote e executa o pacote. A coleção de avisos é mostrada criando um WarningEnumerator, que herda dessa DtsEnumerator classe e exibe cada descrição de aviso.
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
Saída de exemplo:
Contagem de avisos de pacote antes da execução: 0
SendMailTask: {34CAEFF9-64BF-401D-B646-C88B705DB971}
Contagem de avisos do pacote após a execução do pacote: 2
A coleção contém os seguintes valores:
[0] O endereço na linha De não está formado corretamente. Está faltando um @ ou não é válido.
[1] O assunto está vazio
Comentários
DtsEnumerator é a interface base para todos os enumeradores. O DtsEnumerator permite apenas a leitura dos dados na coleção e não é usado para modificar a coleção subjacente.
Inicialmente, o enumerador é posicionado antes do primeiro elemento da coleção. Reset também traz o enumerador de volta para essa posição. Nessa posição, a chamada Current gera uma exceção. Por isso, você deve chamar MoveNext para avançar o enumerador até o primeiro elemento da coleção antes de ler o valor de Current.
Current retorna o mesmo objeto até MoveNext ou Reset ser chamado. MoveNext define Current como o próximo elemento.
Depois que o final da coleção é passado, o enumerador é posicionado após o último elemento na coleção e a chamada MoveNext retorna false
. Se a última chamada a ser MoveNext retornada false
, a chamada Current gerará uma exceção. Para definir Current como o primeiro elemento da coleção novamente, é possível chamar Reset seguido de MoveNext.
Um enumerador permanece válido desde que a coleção permaneça inalterada. Se forem feitas alterações na coleção, como adicionar, modificar ou excluir elementos, o enumerador será invalidado irrecuperavelmente e a próxima chamada para MoveNext ou Reset gerará um InvalidOperationException
. Se a coleção for modificada entre MoveNext e Current, Current retornará o elemento para o qual ela está definida, mesmo que o enumerador já esteja invalidado.
O enumerador não tem acesso exclusivo à coleção; portanto, enumerar por meio de uma coleção não é um procedimento thread-safe. Mesmo quando uma coleção é sincronizada, outros threads ainda podem modificar a coleção, o que faz com que o enumerador lance uma exceção. Para garantir a segurança do thread durante a enumeração, você pode bloquear a coleção durante toda a enumeração ou capturar as exceções resultantes de alterações feitas por outros threads.
Construtores
DtsEnumerator(IEnumerator, DTSReadOnlyCollectionBase) |
Inicializa uma nova instância da classe DtsEnumerator. |
Propriedades
Current |
Obtém o elemento atual na coleção. |
Métodos
MoveNext() |
Avança o enumerador para o próximo elemento da coleção. |
Reset() |
Define o enumerador com sua posição inicial, que é antes do primeiro elemento da coleção. |