C# 第八篇 数据访问技术(二)Dataset与DataAdapter应用
概述
DataSet对象是创建在内存中的集合对象,包含任意数量的数据表及所有表的约束、索引和关系等。一个DataSet对象包含一组DataTable对象和一组DataRelation对象,每个DataTable对象都由集合对象DataColumn、DataRow和Constraint组成。
数据表对象中每行会跟踪一个RowState标志,来标识数据行的状态是未修改、已修改、新增或已删除。数据表还维护着每个已修改数据行的一个附加拷贝,这样就可以同时保留从数据库中取出的原值和当前值。
使用DataSet对象更新数据库,我们可以使用数据适配器的Update方法。Update方法的功能与适配器的Fill方法类似。唯一不同的是Update方法会查找数据集中的每个数据表的每个数据行,当它发现某个数据行状态为已修改、新增或已删除的时候,它就会为每个这样的数据行执行一个单独的命令。
数据适配器使用UpdateCommand、InsertCommand和DeleteCommand等属性引用的SqlCommand对象来执行这些命令。
DataSet类型还支持在内部包含的数据表上定义约束,包括主键约束、唯一约束和外键约束等。
DataView可以用来排序或过滤包含在数据表的数据,而不用修改数据表的实际内容,这与数据库中的数据表上定义的视图概念是非常类似的。
DataSet和DataTable
创建DataSet对象
//实例化dataset对象,并指定名称 DataSet ds = new DataSet("DataSetName");
查看调用OracleDataAdapter.Fill创建的结构
//将OracleDataAdapter的值,Fill给dataset对象 da.Fill(ds,"Orders"); //创建datatable对象,并赋值(ds对象的第一个表数据) DataTable tbl = ds.Table[0]; //遍历datatable对象列名,DataColumn col 是列对象,tbl.Columns 是列总数 , col.ColumnName 当前列列名 foreach(DataColumn col in tbl.Columns) Console.WriteLine(col.ColumnName);
查看OracleDataAdapter返回的数据
DataRow对象
//创建datatable对象,并赋值(ds对象的第一个表数据) DataTable tbl = ds.Table[0]; //创建datarow对象,并设置 tbl对象第一行数据 DataRow row = tbl.Row[0]; //输出当前行指定列值,也可用行索引,从0开始,比如 row[0] Console.WriteLine(row["OrderID"]);
检查存储在DataRow中的数据
DataTable tbl = row.Table; foreach(DataColumn col in tbl.Columns) Console.WriteLine(row[col]);
检查DatTable中的DataRow对象
//创建datatable对象,并赋值(ds对象的第一个表数据) DataTable tbl = ds.Table[0]; foreach(DataRow row in tbl.Rows) DisplayRow(row);