Share via


DataTableReader.GetEnumerator Metode

Definisi

Mengembalikan enumerator yang dapat digunakan untuk melakukan iterasi melalui kumpulan item.

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

Mengembalikan

Objek IEnumerator yang mewakili kumpulan item.

Pengecualian

Upaya dilakukan untuk membaca atau mengakses kolom dalam keadaan tertutup DataTableReader.

Contoh

Contoh berikut menunjukkan penggunaan GetEnumerator metode . Ini termasuk perilaku enumerator ketika baris dihapus dari yang mendasar DataTable saat enumerator aktif.

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

Prosedur menampilkan teks berikut di jendela Konsol:

Peter  
Mary  
Russ  

Keterangan

Enumerator hanya memungkinkan untuk membaca data di DataTableReader. Enumerator tidak dapat digunakan untuk mengubah koleksi yang mendasar.

Pada awalnya, enumerator diposisikan sebelum elemen pertama dalam koleksi. Pada posisi ini, panggilan Current melemparkan pengecualian. Oleh karena itu, Anda harus memanggil MoveNext untuk memajukan enumerator ke elemen pertama koleksi sebelum membaca nilai Current.

CurrentDbDataRecordmengembalikan , dan mengembalikan objek yang sama hingga atau MoveNextReset dipanggil. MoveNextCurrent diatur ke elemen berikutnya.

Setelah akhir koleksi dilewatkan, enumerator diposisikan setelah elemen terakhir dalam koleksi, dan panggilan MoveNext mengembalikan false. Jika panggilan terakhir untuk MoveNext dikembalikan false, panggilan Current akan melemparkan pengecualian. Selain itu, karena DataTableReader menyediakan akses hanya penerusan ke datanya, memanggil Reset metode IEnumerator melempar NotSupportedException.

DataTableReader menyediakan enumerator yang stabil. Ini berarti bahwa meskipun penghapusan atau penambahan baris terjadi dalam data yang mendasar, enumerator yang dikembalikan oleh panggilan ke GetEnumerator masih valid.

Berlaku untuk