DataTableReader.GetEnumerator メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > DataTableReader.GetEnumerator メソッドの意味・解説 

DataTableReader.GetEnumerator メソッド

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

項目のコレクションを反復処理するために使用できる列挙子を返します。

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

Public Overrides Function
 GetEnumerator As IEnumerator
Dim instance As DataTableReader
Dim returnValue As IEnumerator

returnValue = instance.GetEnumerator

戻り値
項目のコレクションを表す IEnumerator オブジェクト。

例外例外
例外の種類条件

InvalidOperationException

閉じている DataTableReader の列を読み取るかアクセスしようとしました。

解説解説

列挙子は、DataTableReader 内のデータの読み取りだけを許可します。列挙子を使用して基になるコレクションを変更することはできません。

まず、列挙子をコレクションの最初の要素の前に配置します。この位置で Current を呼び出すと、例外がスローされます。したがって、Current の値を読み取る前に、MoveNext を呼び出して、コレクションの最初の要素に列挙子を進める必要があります。

Current は DbDataRecord を返します。MoveNext または Reset が呼び出されるまでは、同じオブジェクトを返します。MoveNext は、Current を次の要素に設定します。

コレクションの末尾を過ぎると、列挙子はコレクションの最後の要素の後ろに配置され、MoveNext を呼び出すと false が返されます。MoveNext への最後の呼び出しで false が返された場合に、Current を呼び出すと例外がスローされます。さらに、DataTableReader ではデータに対する前方向のアクセスを提供するため、IEnumerator の Reset メソッドを呼び出すと がスローされます。

DataTableReader により、安定した列挙子が得られます。つまり、基になるデータ内で行の削除や追加が発生しても、GetEnumerator を呼び出すことで返される列挙子は有効です。

使用例使用例

GetEnumerator メソッドを使用する例を次に示します。この例では、列挙子がアクティブなときに基になる DataTable から行が削除された場合の列挙子の動作を示しています。

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
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();
}

このプロシージャでは、コンソール ウィンドウに次のテキストを表示します。

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

DataTableReader.GetEnumerator メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



DataTableReader.GetEnumerator メソッドのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS