DataTableReader.GetEnumerator Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
.
Current
DbDataRecordmengembalikan , dan mengembalikan objek yang sama hingga atau MoveNextReset dipanggil. MoveNext
Current
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.