DataTableReader.GetEnumerator Yöntem

Tanım

Öğe koleksiyonunda yinelemek için kullanılabilecek bir numaralandırıcı döndürür.

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

Döndürülenler

IEnumerator Öğe koleksiyonunu temsil eden bir nesne.

Özel durumlar

Kapalı bir içindeki bir sütunu okuma veya sütuna erişme girişiminde bulunuldu DataTableReader.

Örnekler

Aşağıdaki örnekte yönteminin kullanımı gösterilmektedir GetEnumerator . Bu, numaralandırıcı etkinken satırlar temel alınandan DataTable silindiğinde numaralandırıcının davranışını içerir.

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

Yordam, Konsol penceresinde aşağıdaki metni görüntüler:

Peter
Mary
Russ

Açıklamalar

Numaralandırıcılar yalnızca içindeki DataTableReaderverilerin okunmasına izin verir. Numaralandırıcılar, temel alınan koleksiyonu değiştirmek için kullanılamaz.

İlk başta, numaralandırıcı koleksiyondaki ilk öğeden önce konumlandırılır. Bu konumda çağrısı Current bir özel durum oluşturur. Bu nedenle, değerini MoveNextokumadan önce numaralandırıcıyı koleksiyonun ilk öğesine ilerletmek için çağrısında Current bulunmalısınız.

Currentbir DbDataRecorddöndürür ve veya MoveNext çağrılana kadar Reset aynı nesneyi döndürür. MoveNext bir sonraki öğeye ayarlar Current .

Koleksiyonun sonu geçirildikten sonra, numaralandırıcı koleksiyondaki son öğeden sonra konumlandırılır ve çağrılan MoveNext false döndürür. döndürülen MoveNextson çağrı false ise çağrısı Current bir özel durum oluşturur. Ayrıca , DataTableReader verilerine yalnızca ileriye doğru erişim sağladığından, IEnumerator yöntemini çağırmak Reset bir NotSupportedExceptionoluşturur.

kararlı DataTableReader bir numaralandırıcı sağlar. Bu, temel alınan veriler içinde satır silme veya eklemeler gerçekleşse bile çağrısı tarafından GetEnumerator döndürülen numaralandırıcının hala geçerli olduğu anlamına gelir.

Şunlara uygulanır