DataTableReader.GetEnumerator Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt einen Enumerator zurück, der zum Durchlaufen der Elementauflistung verwendet werden kann.
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
Gibt zurück
Ein IEnumerator Objekt, das die Elementauflistung darstellt.
Ausnahmen
Es wurde versucht, eine Spalte in einer geschlossenen DataTableReaderSpalte zu lesen oder darauf zuzugreifen.
Beispiele
Im folgenden Beispiel wird die Verwendung der GetEnumerator-Methode gezeigt. Dies schließt das Verhalten des Enumerators ein, wenn Zeilen aus dem zugrunde liegenden DataTable gelöscht werden, während der Enumerator aktiv ist.
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
Das Verfahren zeigt den folgenden Text im Konsolenfenster an:
Peter
Mary
Russ
Hinweise
Enumeratoren ermöglichen nur das Lesen der Daten in der DataTableReader. Enumeratoren können nicht zum Ändern der zugrunde liegenden Auflistung verwendet werden.
Zunächst wird der Enumerator vor dem ersten Element in der Auflistung positioniert. An dieser Position löst der Aufruf Current eine Ausnahme aus. Daher müssen Sie aufrufen MoveNext , um den Enumerator zum ersten Element der Auflistung vor dem Lesen des Werts Currentvon .
Current gibt ein DbDataRecord, und gibt dasselbe Objekt zurück, bis entweder MoveNext oder Reset aufgerufen wird.
MoveNext wird auf das nächste Element festgelegt Current .
Nachdem das Ende der Auflistung übergeben wurde, wird der Enumerator nach dem letzten Element in der Auflistung positioniert, und der Aufruf MoveNext gibt "false" zurück. Wenn der letzte zurückzugebende MoveNextfalse Aufruf Current eine Ausnahme auslöst. Da der DataTableReader vorwärtsgeschützte Zugriff auf seine Daten ermöglicht, löst das Aufrufen der Reset Methode des IEnumerator eine .NotSupportedException
Dies DataTableReader stellt einen stabilen Enumerator bereit. Dies bedeutet, dass auch dann, wenn Zeilenlöschungen oder Ergänzungen innerhalb der zugrunde liegenden Daten auftreten, der von einem Aufruf GetEnumerator zurückgegebene Enumerator weiterhin gültig ist.