InitDataSet
InitDataSet メソッドを使用すると、DataSet オブジェクトを作成できます。このオブジェクトは、メモリ内のデータのキャッシュを表します。InitDataSet では、Caché データの構造が反映されるように、そのオブジェクトを構成します。以下のような特徴があります。
-
Contacts と PhoneNumbers という 2 つの DataTable オブジェクトがあり、Caché の Provider.Contact テーブルと Provider.PhoneNumber テーブルを表します。conAdapter と phoneAdapter を使用して、Contacts と PhoneNumbers にデータを入力します。
-
各 DataTable は、ID 列で定義された主キーを持っています。いずれの場合でも、列は、対応する Caché テーブルの ID 列を表します。 DataTable の主キーを定義しておくと、アプリケーションで ID 値を使用してデータセットの行を取得するために、Find メソッドを使用できます。
-
2 つのデータ・テーブル間の親子リレーションシップ。これには、Provider.Contact と Provider.PhoneNumber 間のリレーションシップが反映されます。DataTable オブジェクト間のリレーションシップを定義することにより、アプリケーションで GetChildRows メソッドを使用できるようになります。Contact の DataRow に対してこのメソッドを呼び出すと、PhoneNumbers にあるすべての子 DataRow オブジェクトが返されます。
-
Contacts の ID 列に対する AutoIncrement 列設定。AutoIncrement は 0 から始まり、-1 ずつ “インクリメント” します。この値は、基本的にはダミー値です。これは、主キーであるため、Contacts の ID 列には何らかの値を割り当てる必要があります。この値は、アプリケーションがデータ・セットを Caché に送信したとき (Update が データ・セットによって呼び出されたとき)、 Caché によって上書きされます。マイナス値で自動的にインクリメントすることにより、Caché によって割り当てられた実際の ID 値と競合することがなくなります。
-
PhoneNumbers の ID 列を、AutoIncrement 列として設定することはできません。Provider.PhoneNumbers の ID 列は、整数ではなく文字列です。子テーブルの Caché の行 ID には、“x||y” という形式を使用します。
このメソッドの本文を、PhoneForm.cs の InitDataSet スタブに追加します。
private void InitDataSet()
{
ds = new DataSet();
conAdapter.Fill(ds, "Contacts");
phoneAdapter.Fill(ds, "PhoneNumbers");
DataColumn contactColumn= ds.Tables["Contacts"].Columns["ID"];
contactColumn.AutoIncrement=true;
contactColumn.AutoIncrementSeed=0;
contactColumn.AutoIncrementStep=-1;
parent_to_child = ds.Relations.Add(ds.Tables["Contacts"].Columns["ID"],
ds.Tables["PhoneNumbers"].Columns["Contact"]);
ds.Tables["Contacts"].PrimaryKey =
new DataColumn[] { ds.Tables["Contacts"].Columns["ID"] };
ds.Tables["PhoneNumbers"].PrimaryKey =
new DataColumn[] { ds.Tables["PhoneNumbers"].Columns["ID"] };
}
Fill がデータ・アダプタで呼び出されたときに、データベースへの接続がまだ開いていない場合、そのアダプタで接続が開きます。この操作を完了した後、アダプタはその接続を、Fill が呼び出される前の状態に戻します。この場合、接続は Fill が呼び出される前には切断されていたため、アダプタは操作が完了すると接続を切断します。
AutoNumbered データベース列を表す AutoIncrement 列の定義の詳細は、".NET Framework 開発者ガイド" の "DataAdapter によるデータ ソースの更新Opens in a new tab" セクションの "AutoIncrement 列" の説明を参照してください。