| ■No92946 (河童 さん) に返信 > ds.Tables["User"].Rows.Add(item_t.team_num, item_u.user_num, item_u.user_name);
team_num が「全体で一意」になる場合は上記で良いですが、 team_num が「グループ内で一意」である場合には、 ds.Tables["User"].Rows.Add(item_g.group_num, item_t.team_num, item_u.user_num, item_u.user_name); にする必要があるでしょう。
> 複数の主キーの設定方法がわかりません。
ds.Tables["Group"].PrimryKey … group_num だけ ds.Tables["Team"].PrimryKey … group_num と team_num ds.Tables["User"].PrimryKey … group_num と team_num と user_num
という構成になるかと思います。
複数の主キーを持つテーブル同士を繋ぐ場合、 .Relations.Add(string, DataColumn[], DataColumn[]) もしくは .Relations.Add(string, DataColumn[], DataColumn[], bool) のオーバーライドを使います。
コードではなくデザイナから指定する場合は、 DataSet デザイナ上で右クリックして、「リレーションシップ」から設定できます。
もしも登録順の都合で、「存在しない num」が一時的に割り当てられるようなケースでは、 ループ処理の前に DataSet の EnforceConstraints プロパティを false にしておきます。
false に設定している間は、リレーションシップや DBNull 制約などが無視されますので、 ループを終えて、全件登録が完了した後で EnforceConstraints を true に戻します。 true に戻した瞬間に制約検査が実行され、問題があれば例外として通知されます。 |