DataTable table1 = new DataTable();
table1.Columns.Add("A");
table1.Columns.Add("B");
DataTable table2 = new DataTable();
table2.Columns.Add("A");
table2.Columns.Add("B");
DataSet dataSet = new DataSet();
dataSet.Tables.Add(table1);
dataSet.Tables.Add(table2);
DataRelation relation1 = dataSet.Relations.Add(
table1.Columns["A"], table2.Columns["A"]);
Debug.Print(dataSet.Relations.Count.ToString());
//1
table1.Rows.Add(1, "foo");
table2.Rows.Add(1, "bar");
Debug.Print(table1.Rows[0].GetChildRows(relation1)[0]["B"].ToString());
//bar
dataSet.Relations.Clear();
Debug.Print(dataSet.Relations.Count.ToString());
//0
try
{
DataRow[] rows = table1.Rows[0].GetChildRows(relation1);
}
catch (Exception ex)
{
Debug.Print(ex.Message);
//この行は、このリレーションシップと同じ DataSet に属していません。
}
try
{
table1.Clear();
}
catch (Exception ex)
{
Debug.Print(ex.Message);
//ForeignKeyConstraint Relation1 によって制約が実行され、Table2 に子行が存在するため、テーブル Table1 を消去できません。
}
table2.Clear();
table1.Clear();
DataRelation relation2 = dataSet.Relations.Add(
table1.Columns["B"], table2.Columns["B"]);
Debug.Print(dataSet.Relations.Count.ToString());
//1
table1.Rows.Add(1, "foo");
try
{
table2.Rows.Add(2, "foo");
}
catch (Exception ex)
{
Debug.Print(ex.Message);
//ForeignKeyConstraint Relation1 には親テーブルに存在している子キー値 (2) が必要です。
}
try
{
table2.Rows.Add(1, "bar");
}
catch (Exception ex)
{
Debug.Print(ex.Message);
//ForeignKeyConstraint Constraint1 には親テーブルに存在している子キー値 (bar) が必要です。
}
table2.Rows.Add(1, "foo");