DataSet是支持ADO.NET的断开式、分布式数据方案的核心。它是数据的内存驻留的表示形式,也就是说,它是一个驻留在内存中的数据库。
DataSet字译是“数据集”,这个数据集中主要包含了数据表等数据对象。其结构类似于关系数据库的结构,它公开表、行、列约束和关系的分层模型。数据集位于System.Data命名空间之中。使用.NET FrameWork命名空间的如下图所示部分,可以创建和使用数据集。
简单解释一下DataSet中的几个重要对象:
(1)DataSet类 包含数据表的DataTableCollection集合和DataRelation对象的DataRealtionCollection集合
(2)DataTable类 包含表行的DataRowCollection集合、数据列的DataColumnCollection集合和数据关系的ChildRelations和ParentRelations集合
(3)DataRow类 包含了RowState属性。该属性的值用来表示自首次从数据库加载以来,行是否已经更改或者如果更改的。它的值包括:deleted、Modified、Added和unchanged。
如何创建DataSet?
主要是两种方法:一是在设计器中创建DataSet对象;另一种是在运行时通过代码创建。这里主要讲解使用代码创建的方法:
DataSet类实现了3种形式的构造函数,用于创建非类型化的数据集。
DataSet()
DataSet(DataSetName)
DataSet(SerializationInfo ,StreamingContext) 或DataSet(SerializationInfo ,StreamingContext,Boolean)
创建类型化的DataSet一般通过DataAdapter(通常通过一个数据库)来填充。
btw:类型化和非类型化的数据集有什么不同?其主要区别在于类型化的数据集的架构(表和列的结构)是派生于.xsd文件的,易于对其进行编程。类型化数据集显示从基类的DataSet派生,然后使用“数据集设计器”中的信息(存储在.xsd文件中)生成一个新的强类型数据集类。架构中的信息(比如表、列等)被作为一组第一类对象和属性生成并编译为此新数据集类。 相比而言,非类型的数据集没有内置架构,它们只作为集合公开。
DataSet ds = new DataSet();
string str = "Data Source=localhost; Initial Catalog=adventureWorks; UserID=sa; Password=sa";
string strsql = "select * from production.product";
SqlDataAdapter da = new SqlDataAdapter(strsql,str); //使用数据适配器
da.Fill(ds); //将查询结果填充到数据集da中
// da.Fill(ds,"prodcut1");// 这是将查询结果填充到数据集da中的数据表product1中