Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

InitDataSet

InitDataSet メソッドを使用すると、DataSet オブジェクトを作成できます。このオブジェクトは、メモリ内のデータのキャッシュを表します。InitDataSet では、Caché データの構造が反映されるように、そのオブジェクトを構成します。以下のような特徴があります。

  • ContactsPhoneNumbers という 2 つの DataTable オブジェクトがあり、Caché の Provider.Contact テーブルと Provider.PhoneNumber テーブルを表します。conAdapterphoneAdapter を使用して、ContactsPhoneNumbers にデータを入力します。

  • DataTable は、ID 列で定義された主キーを持っています。いずれの場合でも、列は、対応する Caché テーブルの ID 列を表します。 DataTable の主キーを定義しておくと、アプリケーションで ID 値を使用してデータセットの行を取得するために、Find メソッドを使用できます。

  • 2 つのデータ・テーブル間の親子リレーションシップ。これには、Provider.ContactProvider.PhoneNumber 間のリレーションシップが反映されます。DataTable オブジェクト間のリレーションシップを定義することにより、アプリケーションで GetChildRows メソッドを使用できるようになります。ContactDataRow に対してこのメソッドを呼び出すと、PhoneNumbers にあるすべての子 DataRow オブジェクトが返されます。

  • ContactsID 列に対する AutoIncrement 列設定。AutoIncrement は 0 から始まり、-1 ずつ “インクリメント” します。この値は、基本的にはダミー値です。これは、主キーであるため、ContactsID 列には何らかの値を割り当てる必要があります。この値は、アプリケーションがデータ・セットを Caché に送信したとき (Update が データ・セットによって呼び出されたとき)、 Caché によって上書きされます。マイナス値で自動的にインクリメントすることにより、Caché によって割り当てられた実際の ID 値と競合することがなくなります。

  • PhoneNumbersID 列を、AutoIncrement 列として設定することはできません。Provider.PhoneNumbersID 列は、整数ではなく文字列です。子テーブルの Caché の行 ID には、“x||y” という形式を使用します。

このメソッドの本文を、PhoneForm.csInitDataSet スタブに追加します。


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"] };
}

Note:

Fill がデータ・アダプタで呼び出されたときに、データベースへの接続がまだ開いていない場合、そのアダプタで接続が開きます。この操作を完了した後、アダプタはその接続を、Fill が呼び出される前の状態に戻します。この場合、接続は Fill が呼び出される前には切断されていたため、アダプタは操作が完了すると接続を切断します。

AutoNumbered データベース列を表す AutoIncrement 列の定義の詳細は、".NET Framework 開発者ガイド" の "DataAdapter によるデータ ソースの更新Opens in a new tab" セクションの "AutoIncrement 列" の説明を参照してください。

FeedbackOpens in a new tab