DataTableReader.GetEnumerator Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Öğ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 Current
okumadan önce numaralandırıcıyı koleksiyonun ilk öğesine ilerletmek için çağrısında MoveNext
bulunmalısınız.
Current
bir 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ı MoveNext
false
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 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.