わいえむねっと

Contents
Categories
Calendar
2010/04
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
Monthly Archives
~2000/01
Recent Entries
RSS1.0
Templates
Information
Processed: 0.019 sec
Chashed: -
2010/04/12 Mon
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");

DataSet.Relations.Clear()はなんでこんな中途半端なの。