TableAdapter の概要

 

公開日: 2016年4月

TableAdapter を使用すると、アプリケーションとデータベース間で通信できます。 具体的には、TableAdapter はデータベースに接続し、クエリまたはストアド プロシージャを実行し、返されたデータが格納された新しいデータ テーブルを返すか、返されたデータを既存の DataTable に格納します。 TableAdapter は、更新されたデータをアプリケーションからデータベースに送り返す場合にも使用します。

Visual Studio の以前のバージョンのユーザーは、TableAdapter を、組み込みの接続オブジェクトを持ち、複数のクエリを含めることのできる DataAdapter であると見なすことも可能です。 TableAdapter に追加された各クエリは、パブリック メソッドとして公開され、オブジェクトに対する他のメソッドまたは関数と同様に呼び出すことができます。

TableAdapter では、DataAdapter の標準の機能に加え、共通のスキーマを共有するクエリを、関連する型指定された DataTable でカプセル化する、新しい型指定されたメソッドを使用できます。 つまり、同じスキーマに準拠するデータを返すクエリである限り、1 つの TableAdapter にいくつでもクエリを追加できます。

以前のバージョンの Visual Studio では、アプリケーションとデータベースの通信に ADO.NET データ アダプターが使用されていました。 データ アダプターは現在も .NET Framework データ プロバイダーの主要なコンポーネントですが、TableAdapter は、DataAdapter の機能を向上させるためにデザイナーで生成されるコンポーネントです。 TableAdapter には、通常、データをフェッチしてデータベースを更新するための Fill メソッドと Update メソッドが含まれています。

TableAdapter は、データセット デザイナーによって、厳密に型指定されたデータセット内に作成されます。 TableAdapter は、データ ソース構成ウィザードを使用して新しいデータセットを作成する間に、作成できます。 また、TableAdapter は、TableAdapter 構成ウィザードを使用して既存のデータセット内に作成することも、サーバー エクスプローラーからデータセット デザイナーにデータベース オブジェクトをドラッグして作成することもできます。 詳細については、「方法 : TableAdapter を作成する」を参照してください。

TableAdapter はデータセット デザイナーでデザインされますが、生成される TableAdapter のクラスは、DataSet の入れ子にされたクラスとして生成されるわけではありません。 これらのクラスは、各データセットに固有の、個別の名前空間に格納されます。 たとえば、NorthwindDataSet という名前のデータセットがある場合、NorthwindDataSet 内の DataTable に関連付けられた TableAdapter は、NorthwindDataSetTableAdapters 名前空間に格納されます。 プログラムで特定の TableAdapter にアクセスするには、TableAdapter の新しいインスタンスを宣言する必要があります。 次のように記述します。

            NorthwindDataSet northwindDataSet = new NorthwindDataSet();

            NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
                new NorthwindDataSetTableAdapters.CustomersTableAdapter();

            customersTableAdapter.Fill(northwindDataSet.Customers);
        Dim northwindDataSet As New NorthwindDataSet()
        Dim customersTableAdapter As New NorthwindDataSetTableAdapters.CustomersTableAdapter()

        customersTableAdapter.Fill(northwindDataSet.Customers)

関連付けられた DataTable スキーマ

TableAdapter を作成する場合、最初のクエリまたはストアド プロシージャは、TableAdapter の関連 DataTable のスキーマを定義するために使用されます。 最初のクエリまたはストアド プロシージャを実行するには、TableAdapter のメインの Fill メソッド (TableAdapter の関連 DataTable に値を格納するメソッド) を呼び出します。 TableAdapter のメインのクエリに対する変更は、関連付けられたデータ テーブルのスキーマに反映されます。 たとえば、メインのクエリから列を削除すると、関連付けられたデータ テーブルから列が削除されます。 TableAdapter に関する他のクエリで、メインのクエリにない列の値を返す SQL ステートメントを使用する場合、デザイナーによって、メインのクエリとその他のクエリの間で、列の変更の同期が試みられます。 詳細については、「方法 : TableAdapter を編集する」を参照してください。

TableAdapter 更新コマンド

TableAdapter の更新機能は、TableAdapter ウィザードで提供されるメインのクエリに基づく情報がどの程度存在するかによって異なります。 たとえば、複数のテーブル (JOIN)、スカラー値、ビュー、または集約関数の結果から値を取得するように設定された TableAdapter の場合、最初の作成時には、基になるデータベースに更新を戻す機能がありません。 ただし、[プロパティ] ウィンドウで手動で INSERT、UPDATE、および DELETE の各コマンドを設定できます。

TableAdapter クエリ

複数のクエリがある TableAdapter

標準のデータ アダプターと異なり、TableAdapter には関連する各データ テーブルにデータを格納するために複数のクエリを設定できます。 それぞれのクエリが、関連するデータ テーブルと同じスキーマに従ったデータを返す限り、アプリケーションに必要なクエリをいくつでも TableAdapter に定義できます。 これにより、多様な基準を満たすデータの読み込みが可能になります。 たとえば、アプリケーションに顧客のテーブルが含まれている場合、名前が特定の英字で始まるすべての顧客をこのテーブルに格納するクエリ、同じ州内のすべての顧客をこのテーブルに格納するクエリなどを作成できます。 特定の州内の顧客を Customers テーブルに格納するには、州の値を示すパラメーターを受け取る FillByState クエリを、SELECT * FROM Customers WHERE State = @State のように作成します。 このクエリは、FillByState メソッドを呼び出し、CustomerTableAdapter.FillByState("WA") のようにパラメーター値を渡して、実行します。 詳細については、「方法 : TableAdapter クエリを作成する」を参照してください。

TableAdapter のデータ テーブルと同じスキーマのデータを返すクエリの他に、スカラー (Single 型) 値を返すクエリを追加できます。 たとえば、顧客数を返すクエリ (SELECT Count(*) From Customers) は、返されるデータがテーブルのスキーマに準拠していなくても、CustomersTableAdapter に対しては有効です。

ClearBeforeFill プロパティ

TableAdapter では、DataAdapter の基底クラスで使用できないプロパティを追加できます。 既定では、TableAdapter のデータ テーブルに値を格納するクエリを実行するたびに、データが消去され、クエリ結果だけがテーブルに読み込まれます。 クエリから返されたデータをデータ テーブル内の既存のデータに追加またはマージする場合は、TableAdapter の ClearBeforeFill プロパティを false に設定します。 データを消去するかどうかに関係なく、更新をデータベースに返すことが必要な場合は、明示的に送信する必要があります。 そのテーブルに値を格納する別のクエリを実行する前に、テーブル内のデータに加えた変更を保存してください。 詳細については、「方法 : TableAdapter を使用してデータを更新する」を参照してください。

TableAdapter の継承

TableAdapter では、設定された DataAdapter をカプセル化することにより、標準データ アダプターの機能が拡張されます。 既定では、TableAdapter は、Component から継承され、DataAdapter クラスにキャストできません。 TableAdapter を DataAdapter にキャストすると、InvalidCastException が発生します。 TableAdapter の基底クラスを変更するには、データセット デザイナーで TableAdapter の Base Class プロパティに Component から派生したクラスを入力します。

TableAdapter のメソッドとプロパティ

TableAdapter クラスは、.NET Framework に属さないので、ドキュメントやオブジェクト ブラウザーで検索できません。 このクラスは、デザイン時に、前述のいずれかのウィザードを使用することにより作成されます。 TableAdapter の作成時に TableAdapter に割り当てられる名前は、処理しているテーブルの名前に基づきます。 たとえば、Orders という名前のデータベース内にあるテーブルに基づいて TableAdapter を作成する場合、その TableAdapter の名前は、OrdersTableAdapter になります。 TableAdapter のクラス名は、データセット デザイナーの Name プロパティを使用して変更できます。

TableAdapter で共通に使用されるメソッドとプロパティを次に示します。

メンバー 説明
TableAdapter.Fill TableAdapter の関連付けられたデータ テーブルに、TableAdapter の SELECT コマンドの実行結果が格納されます。 詳細については、「方法 : データセットにデータを読み込む」を参照してください。
TableAdapter.Update データベースに変更を送信し、更新の影響を受ける行の数を表す整数値を返します。 詳細については、「方法 : TableAdapter を使用してデータを更新する」を参照してください。
TableAdapter.GetData データが格納された新しい DataTable を返します。
TableAdapter.Insert データ テーブル内に新しい行を作成します。 詳細については、「方法 : DataTable に行を追加する」を参照してください。
TableAdapter.ClearBeforeFill いずれかの Fill メソッドを呼び出す前に、データ テーブルが空になっているかどうかを確認します。

TableAdapter 更新メソッド

TableAdapter では、データ コマンドを使用して、データベースからの読み取りと書き込みを実行します。 TableAdapter の最初の Fill (メイン) クエリは、関連データ テーブルのスキーマや TableAdapter.Update に関連付けられた InsertCommandUpdateCommand、および DeleteCommand の各コマンドを作成する基になります。 そのため、TableAdapter の Update メソッドを呼び出すと、TableAdapter クエリの構成ウィザードで追加したクエリではなく、TableAdapter の元の設定時に作成されたステートメントが実行されます。

TableAdapter を使用すると、通常実行するコマンド操作を効果的に実行できます。 たとえば、アダプターの Fill メソッドを呼び出すと、その SelectCommand プロパティに設定されているデータ コマンドがアダプターによって実行され、データ リーダー (SqlDataReader など) によって結果セットがデータ テーブルに読み込まれます。 同様に、アダプターの Update メソッドを呼び出すと、データ テーブル内で変更された各レコードに対して、UpdateCommandInsertCommand、および DeleteCommand の各プロパティに設定されている適切なコマンドが実行されます。

注意

メインのクエリに十分な情報がある場合、TableAdapter の生成時に既定で InsertCommandUpdateCommand、および DeleteCommand の各コマンドが作成されます。 TableAdapter のメインのクエリが単一のテーブル SELECT ステートメントより複雑な場合、デザイナーで InsertCommandUpdateCommand、および DeleteCommand を生成できないことがあります。 これらのコマンドが生成されていない場合、TableAdapter.Update メソッドの実行時にエラーが発生します。

TableAdapter の GenerateDbDirectMethods

InsertCommandUpdateCommand、および DeleteCommand 以外に、データベースに対して直接実行できるメソッドも、TableAdapter に設定できます。 これらのメソッド (TableAdapter.InsertTableAdapter.Update、および TableAdapter.Delete) は、データベース内でデータを直接操作するために呼び出すことができます。 つまり、TableAdapter.Update を呼び出して関連するデータ テーブルに対して保留になっている挿入、更新、および削除を処理するのではなく、これらの個別のメソッドをコードから呼び出すことができます。

これらの直接メソッドを作成しない場合は、TableAdapter の GenerateDbDirectMethods プロパティを false に設定します ([プロパティ] ウィンドウ内)。 TableAdapter に追加されるその他のクエリはスタンドアロン クエリであり、これらのメソッドを生成しません。

TableAdapter での Null 許容型のサポート

TableAdapter は、Null 許容型の Nullable(Of T) および T? をサポートしています。 Visual Basic の null 許容型の詳細については、「Nullable Value Types」を参照してください。 C# の null 許容型の詳細については、「Null 許容型の使用」を参照してください。

参照

データに関するチュートリアル
方法 : データベース内のデータに接続する
チュートリアル: データベース内のデータへの接続 (Windows フォーム)
アプリケーションでデータを受け取る準備
アプリケーションへのデータのフェッチ
Visual Studio でのデータへのコントロールのバインド
アプリケーションでのデータ編集
データの検証
データの保存