(七)DataSet对象——以编程方式访问数据库
1、 填充DataSet对象
方法如下:
DataSet ds = new DataSet();
adapter.Fill ( ds );
或者:
DataSet ds = new DataSet();
adapter.Fill ( ds , “ myTable ”);
如果DataSet中已经存在名为myTable的表,将用数据适配器中的数据填充它;否则,将添加这样的表。表名区分大小写。
与DataTable一样,通常需要在填充表数据前填充表的架构信息。同样,可以使用如下方法来完成:
DataSet ds = new DataSet();
adapter.Fill Schema( ds,SchemaType.Mapped, “ myTable” );
adapter.Fill ( ds , “ myTable ”);
2、 定义和使用表关系
要使用数据库中的数据填充的DataSet对象实现表之前的关系,必须手工添加关系。DataSet的Relation属性包含一系列表之间的关系。添加关系的方法如下:
ds.Relation.Add (
“ParentTable_ChildTable” ,
ds.Tables[ “ ParentTable ” ].Columns [ “ ParentTableID ” ] ,
ds.Tables[ “ ChildTable ” ].Columns [ “ParentTableID” ]
);
这是在表ParentTable和ChildTable之间创建了一个名为ParentTable_ChildTable的关系。ParentTableID的列是ParentTable表的主键,同时是表ChildTable的外键。如果一个或两个表有组合主键,可以用DataColumn对象数组代替单个DataColumn对象。
以这样方式定义关系后,就可以在代码中使用它。为此,可使用DataRow.GetChildRows()方法。例如:
DataRow parentRow = ds.Tables [ “ParentTable” ].Rows[0];
DataRow childRow = parentRow.GetChildRows ( “ParentTable_ChildTable” );
3、 类型化数据集
在数据绑定的环境外,与使用BindingSource控件情况大致相同,只是不使用BindingSource控件,而必须自己填充类型化数据集的实例。考虑类型化数据集时,首先要看它创建了哪些代码和类。