DataTableReader.GetEnumerator Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar en uppräknare som kan användas för att iterera genom objektsamlingen.
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
Returer
Ett IEnumerator objekt som representerar objektsamlingen.
Undantag
Ett försök gjordes att läsa eller komma åt en kolumn i en stängd DataTableReader.
Exempel
I följande exempel visas användningen av metoden GetEnumerator. Detta inkluderar uppräknarens beteende när rader tas bort från den underliggande DataTable medan uppräknaren är aktiv.
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
Proceduren visar följande text i konsolfönstret:
Peter
Mary
Russ
Kommentarer
Uppräknare tillåter endast läsning av data i DataTableReader. Uppräknare kan inte användas för att ändra den underliggande samlingen.
Först placeras uppräknaren före det första elementet i samlingen. I det här läget utlöser anrop Current ett undantag. Därför måste du anropa MoveNext för att flytta uppräknaren till det första elementet i samlingen innan du läser värdet Currentför .
Current returnerar ett DbDataRecordoch returnerar samma objekt tills antingen MoveNext eller Reset anropas.
MoveNext anger Current till nästa element.
När slutet av samlingen har skickats placeras uppräknaren efter det sista elementet i samlingen och anropet MoveNext returnerar false. Om det senaste anropet till MoveNext returnerade falseutlöser anropet Current ett undantag. Dessutom, eftersom DataTableReader ger framåtriktad åtkomst till sina data, anropar Reset metoden för IEnumerator genererar en NotSupportedException.
Ger DataTableReader en stabil uppräknare. Det innebär att även om radborttagningar eller tillägg sker inom underliggande data är uppräknaren som returneras av ett anrop till GetEnumerator fortfarande giltig.