注
DataSet クラスと関連クラスは、アプリケーションがデータベースから切断されている間にアプリケーションがメモリ内のデータを操作できるようにする、2000 年代初頭のレガシ .NET Framework テクノロジです。 このテクノロジは、ユーザーがデータを変更し、変更をデータベースに保持できるアプリに特に役立ちます。 データセットは実証済みの成功したテクノロジですが、新しい .NET アプリケーションには Entity Framework Core を使用することをお勧めします。 Entity Framework は、オブジェクト モデルとして表形式データを操作するより自然な方法を提供し、よりシンプルなプログラミング インターフェイスを備えています。
データセット内の特定のレコードを検索するには、DataTable で FindBy メソッドを使用するか、独自の foreach ステートメントを記述してテーブルの Rows コレクションをループ処理するか、 LINQ to DataSet を使用します。
データセットの大文字と小文字の区別
データセット内では、テーブル名と列名は既定で大文字と小文字が区別されません。つまり、"Customers" というデータセット内のテーブルを "Customers" と呼ぶこともできます。これは、SQL Server を含む多くのデータベースの名前付け規則と一致します。 SQL Server の既定の動作では、データ要素の名前を大文字と小文字のみで区別することはできません。
注
データセットとは異なり、XML ドキュメントでは大文字と小文字が区別されるため、スキーマで定義されているデータ要素の名前では大文字と小文字が区別されます。 たとえば、スキーマ プロトコルを使用すると、スキーマは Customers と呼ばれるテーブルと、 customersという別のテーブルを定義できます。 これにより、大文字と小文字のみが異なる要素を含むスキーマを使用して、データセット クラスが生成される際に、名前の競合が発生する可能性があります。
ただし、ケースセンシティビティがデータセット内でのデータ解釈の要因になる可能性があります。 たとえば、データセット テーブル内のデータをフィルター処理する場合、比較で大文字と小文字が区別されるかどうかに応じて、検索条件によって異なる結果が返される場合があります。 フィルター処理、検索、および並べ替えの大文字と小文字の区別を制御するには、データセットの CaseSensitive プロパティを設定します。 データセット内のすべてのテーブルは、既定でこのプロパティの値を継承します。 (テーブルの CaseSensitive プロパティを設定することで、個々のテーブルに対してこのプロパティをオーバーライドできます)。
データ テーブル内の特定の行を見つける
主キー値を持つ型指定されたデータセット内の行を検索するには
行を見つけるには、テーブルの主キーを使用する厳密に型指定された
FindByメソッドを呼び出します。次の例では、
CustomerID列がCustomersテーブルの主キーです。 これは、生成されたFindByメソッドがFindByCustomerIDされることを意味します。 この例では、生成されたFindByメソッドを使用して、特定のDataRowを変数に割り当てる方法を示します。
主キー値を持つ型指定されていないデータセット内の行を検索するには
DataRowCollection コレクションのFind メソッドを呼び出し、主キーをパラメーターとして渡します。
次の例は、
foundRowという新しい行を宣言し、 Find メソッドの戻り値を割り当てる方法を示しています。 主キーが見つかった場合は、列インデックス 1 の内容がメッセージ ボックスに表示されます。
列の値で行を検索する
任意の列の値に基づいて行を検索するには
データ テーブルは、Select メソッドを使用して作成されます。このメソッドは、Select メソッドに渡された式に基づいてDataRowの配列を返します。 有効な式の作成の詳細については、 Expression プロパティに関するページの「式の構文」セクションを参照してください。
関連レコードにアクセスする
データセット内のテーブルが関連している場合、 DataRelation オブジェクトは、関連するレコードを別のテーブルで使用できるようにします。 たとえば、 Customers テーブルと Orders テーブルを含むデータセットを使用できます。
親テーブル内のDataRowのGetChildRows メソッドを呼び出すことで、DataRelation オブジェクトを使用して関連レコードを検索できます。 このメソッドは、関連する子レコードの配列を返します。 または、子テーブル内のDataRowのGetParentRow メソッドを呼び出すことができます。 このメソッドは、親テーブルから 1 つの DataRow を返します。
このページでは、型指定されたデータセットの使用例を示します。 型指定されていないデータセット内のリレーションシップのナビゲーションの詳細については、「DataRelations のナビゲーション」を参照してください。
注
Windows フォーム アプリケーションで作業していて、データ バインディング機能を使用してデータを表示している場合、デザイナーによって生成されたフォームは、アプリケーションに十分な機能を提供する可能性があります。 詳細については、「 Visual Studio でコントロールをデータにバインドする」を参照してください。 具体的には、「 データセットのリレーションシップ」を参照してください。
次のコード例は、型指定されたデータセット内のリレーションシップを上下に移動する方法を示しています。 コード例では、型指定された DataRow (NorthwindDataSet.OrdersRow) メソッドと生成された FindByPrimaryKey (FindByCustomerID) メソッドを使用して、目的の行を検索し、関連レコードを返します。 この例は、次の場合にのみ正しくコンパイルおよび実行されます。
Customersテーブルを持つNorthwindDataSetという名前のデータセットのインスタンス。Ordersのテーブル。2 つのテーブルを関連付けるリレーションシップ
FK_Orders_Customersという名前。
さらに、両方のテーブルに、返されるレコードのデータを入力する必要があります。
選択した親レコードの子レコードを返すには
特定の
Customersデータ行のGetChildRows メソッドを呼び出し、Ordersテーブルから行の配列を返します。
選択した子レコードの親レコードを返すには
特定の
Ordersデータ行のGetParentRow メソッドを呼び出し、Customersテーブルから 1 つの行を返します。