DataSet 被参照行の削除
- 題名: DataSet 被参照行の削除
- 著者: KKY
- 日時: 2005/05/28 13:32:29
- ID: 10993
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: DataSet 被参照行の削除
- 著者: 深山
- 日時: 2005/05/30 18:57:14
- ID: 11014
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: DataSet 被参照行の削除
- 著者: KKY
- 日時: 2005/05/30 20:55:27
- ID: 11017
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
2005/05/29(Sun) 12:45:30 編集(投稿者)
2005/05/29(Sun) 12:42:57 編集(投稿者)
2005/05/29(Sun) 12:40:23 編集(投稿者)
2005/05/28(Sat) 15:17:46 編集(投稿者)
2005/05/28(Sat) 13:37:36 編集(投稿者)
お世話になっております。
データセットにてTableA,TableBを追加して
TableBの外部キーとTableAの主キーが関連しています。
TableA.ID ← TableB.RefA_ID
ここでサンプル行をTableA、TableBに追加し、
TableAの行をDataGridから[Deleteボタン]で削除しようとしたところ
例外が発生して、アプリが落ちてしまいます。
例外:
制約がリレーションシップConstraint1で適用され、
この行を削除すると子行が孤立するため、この行を削除できません。
この例外は意図した通りですが、落ちるのが回避できません。
main()関数で止まるのでどこで落ちているのかはよくわかりません。
また、Rule.SetNullなどではなく、被参照行を削除できないようにしたいです。
どうすればよろしいでしょうか。よろしくお願いいたします。
(DataRelationを使って同じことをやっても同じ結果でした。)
以下がコードです。
Windowsアプリケーション(自動生成コード以外で自分が書いたのはこれだけです。)
-------------------------------------------------------
DataSet ds = new DataSet();
dataGrid1.DataSource = ds;
// Table A--------------------------------------------------------------
ds.Tables.Add( "TableA" );
// 主キー作成
DataColumn[] dcPrimaryKey = new DataColumn[ 1 ];
dcPrimaryKey[ 0 ] = ds.Tables[ "TableA" ].Columns.Add( "ID", typeof( int ) );
ds.Tables[ "TableA" ].PrimaryKey = dcPrimaryKey;
//サンプル行追加
DataRow row = ds.Tables[ "TableA" ].NewRow();
row[ "ID" ] = 1;
ds.Tables[ "TableA" ].Rows.Add( row );
// Table B--------------------------------------------------------------
ds.Tables.Add( "TableB" );
ds.Tables[ "TableB" ].Columns.Add( "RefA_ID", typeof( int ) );
// 外部キー作成
ForeignKeyConstraint fkc = new ForeignKeyConstraint(
ds.Tables[ "TableA" ].Columns[ "ID" ],
ds.Tables[ "TableB" ].Columns[ "RefA_ID" ] );
//制約の追加
fkc.DeleteRule = Rule.None;
ds.Tables[ "TableB" ].Constraints.Add( fkc );
//サンプル行追加
row = ds.Tables[ "TableB" ].NewRow();
row[ "RefA_ID" ] = 1;
ds.Tables[ "TableB" ].Rows.Add( row );