Partager via


DataTableReader.GetEnumerator Méthode

Définition

Retourne un énumérateur qui peut être utilisé pour itérer au sein de la collection d'éléments.

public:
 override System::Collections::IEnumerator ^ GetEnumerator();
public override System.Collections.IEnumerator GetEnumerator ();
override this.GetEnumerator : unit -> System.Collections.IEnumerator
Public Overrides Function GetEnumerator () As IEnumerator

Retours

IEnumerator représentant la collection d'éléments.

Exceptions

Une tentative a été effectuée pour lire une colonne ou y accéder dans un DataTableReader fermé.

Exemples

L'exemple suivant illustre l'utilisation de la méthode GetEnumerator. Cela inclut le comportement de l’énumérateur lorsque des lignes sont supprimées du sous-jacent DataTable pendant que l’énumérateur est actif.

public static void Main()
{
    try
    {
        DataTable userTable = new DataTable("peopleTable");

        userTable.Columns.Add("Id", typeof(int));
        userTable.Columns.Add("Name", typeof(string));

        // Note that even if you create the DataTableReader
        // before adding the rows, the enumerator can still
        // visit all the rows.
        DataTableReader reader = userTable.CreateDataReader();
        userTable.Rows.Add(new object[] { 1, "Peter" });
        userTable.Rows.Add(new object[] { 2, "Mary" });
        userTable.Rows.Add(new object[] { 3, "Andy" });
        userTable.Rows.Add(new object[] { 4, "Russ" });

        IEnumerator enumerator = reader.GetEnumerator();
        // Keep track of whether the row to be deleted
        // has actually been deleted yet. This allows
        // this sample to demonstrate that the enumerator
        // is able to survive row deletion.
        bool isRowDeleted = false;
        while (enumerator.MoveNext())
        {
            DbDataRecord dataRecord = (DbDataRecord)enumerator.Current;

            // While the enumerator is active, delete a row.
            // This doesn't affect the behavior of the enumerator.
            if (!isRowDeleted)
            {
                isRowDeleted = true;
                userTable.Rows[2].Delete();
            }
            Console.WriteLine(dataRecord.GetString(1));
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
    Console.ReadLine();
}
Sub Main()
   Try
      Dim userTable As New DataTable("peopleTable")
      userTable.Columns.Add("Id", GetType(Integer))
      userTable.Columns.Add("Name", GetType(String))

      ' Note that even if you create the DataTableReader
      ' before adding the rows, the enumerator can still
      ' visit all the rows.
      Dim reader As DataTableReader = userTable.CreateDataReader()
      userTable.Rows.Add(1, "Peter")
      userTable.Rows.Add(2, "Mary")
      userTable.Rows.Add(3, "Andy")
      userTable.Rows.Add(4, "Russ")

      Dim enumerator As IEnumerator = reader.GetEnumerator()
      ' Keep track of whether the row to be deleted
      ' has actually been deleted yet. This allows
      ' this sample to demonstrate that the enumerator
      ' is able to survive row deletion.
      Dim isRowDeleted As Boolean = False
      While (enumerator.MoveNext())

         Dim dataRecord As DbDataRecord = CType(enumerator.Current, _
             DbDataRecord)

         ' While the enumerator is active, delete a row.
         ' This doesn't affect the behavior of the enumerator.
         If Not isRowDeleted Then
            isRowDeleted = True
            userTable.Rows(2).Delete()
         End If
         Console.WriteLine(dataRecord.GetString(1))
      End While
   Catch ex As Exception

      Console.WriteLine(ex)
   End Try
   Console.ReadLine()
End Sub

La procédure affiche le texte suivant dans la fenêtre Console :

Peter  
Mary  
Russ  

Remarques

Les énumérateurs autorisent uniquement la lecture des données dans le DataTableReader. Les énumérateurs ne peuvent pas être utilisés pour modifier la collection sous-jacente.

Au début, l’énumérateur est positionné avant le premier élément de la collection. À cette position, l’appel Current lève une exception. Par conséquent, vous devez appeler MoveNext pour avancer l'énumérateur jusqu'au premier élément de la collection avant de lire la valeur de Current.

Current retourne un DbDataRecordet retourne le même objet jusqu’à ce que MoveNext ou Reset soit appelé. MoveNext affecte l'élément suivant à Current.

Une fois la fin de la collection passée, l’énumérateur est positionné après le dernier élément de la collection, et l’appel MoveNext renvoie false. Si le dernier appel à MoveNext retourné false, l’appel Current lève une exception. En outre, comme le DataTableReader fournit un accès en avant uniquement à ses données, l’appel de la Reset méthode de l’IEnumerator lève un NotSupportedException.

Fournit DataTableReader un énumérateur stable. Cela signifie que même si des suppressions ou des ajouts de lignes se produisent dans les données sous-jacentes, l’énumérateur retourné par un appel à GetEnumerator est toujours valide.

S’applique à