Share via


DataTableReader.GetEnumerator Yöntem

Tanım

Öğe koleksiyonunda yineleme yapmak 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 olarak, 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 Currentokumadan önce numaralandırıcıyı koleksiyonun ilk öğesine ilerletmek için çağrısında MoveNext bulunmalısınız.

Currentbir DbDataRecorddöndürür ve veya Reset çağrılana kadar MoveNext 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ılması MoveNext false değerini döndürür. döndürülen son çağrısı MoveNextfalseCurrent 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 ekleme işlemleri gerçekleşse bile çağrısı GetEnumerator tarafından döndürülen numaralandırıcının hala geçerli olduğu anlamına gelir.

Şunlara uygulanır