DataTableReader.GetEnumerator Methode

Definitie

Retourneert een enumerator die kan worden gebruikt om de itemverzameling te herhalen.

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

Retouren

Een IEnumerator object dat de itemverzameling vertegenwoordigt.

Uitzonderingen

Er is geprobeerd een kolom in een gesloten DataTableReaderkolom te lezen of te openen.

Voorbeelden

In het volgende voorbeeld ziet u het gebruik van de methode GetEnumerator. Dit omvat het gedrag van de enumerator wanneer rijen uit de onderliggende DataTable rij worden verwijderd terwijl de enumerator actief is.

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

In de procedure wordt de volgende tekst weergegeven in het consolevenster:

Peter
Mary
Russ

Opmerkingen

Enumerators staan alleen toe om de gegevens in de DataTableReader. Enumerators kunnen niet worden gebruikt om de onderliggende verzameling te wijzigen.

In eerste instantie wordt de enumerator vóór het eerste element in de verzameling weergegeven. Op deze positie genereert het aanroepen Current een uitzondering. Daarom moet u de opsomming doorschakelen MoveNext naar het eerste element van de verzameling voordat u de waarde van Current.

Current retourneert een DbDataRecord, en retourneert hetzelfde object tot MoveNext of Reset wordt aangeroepen. MoveNext wordt ingesteld Current op het volgende element.

Nadat het einde van de verzameling is doorgegeven, wordt de enumerator geplaatst na het laatste element in de verzameling en retourneert aanroepen MoveNext onwaar. Als de laatste aanroep die moet MoveNext worden falsegeretourneerd, genereert het aanroepen Current een uitzondering. Bovendien, omdat de DataTableReader functie alleen-doorstuurtoegang tot de gegevens biedt, genereert het aanroepen van de Reset methode van de IEnumerator een NotSupportedException.

De DataTableReader biedt een stabiele enumerator. Dit betekent dat zelfs als rijverwijderingen of toevoegingen plaatsvinden binnen de onderliggende gegevens, de opsomming die wordt geretourneerd door een aanroep GetEnumerator nog steeds geldig is.

Van toepassing op