文章教程

11.4DataSet对象

8/31/2020 9:56:04 PM 人评论 次浏览

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第11章\DataSet对象.mp4

DataSet对象是ADO.NET中断开式和分布式数据方案的核心对象。DataSet是数据的内存驻留表示形式,它可以用于多种不同的数据源,也可以用于XML数据,或用于管理应用程序本地的数据。DataSet表示包括相关表、约束和表间关系在内的整个数据集。本节将详细讲解DataSet对象的基本知识。

DataSet是ADO.NET的核心组件之一,也是各种基于.NET平台程序语言开发数据库应用程序最常接触的类。DataSet在ADO.NET实现从数据库抽取数据中起到关键作用,因为在从数据库完成数据抽取后,它是各种数据源中的数据在计算机内存中映射成的缓存,所以通常称DataSet为一个数据容器。也有人把DataSet称为内存中的数据库,因为在DataSet中可以包含很多数据表以及这些数据表之间的关系。此外,DataSet在客户端实现读取、更新数据库等过程中起到了中间部件的作用。

DataSet从数据源中获取数据以后就断开了与数据源之间的连接。允许在DataSet中定义数据约束和表关系,增加、删除和编辑记录,还可以对DataSet中的数据进行查询、统计等。当完成了各项操作以后,还可以把DataSet中的数据送回数据源。

创建DataSet的语法格式如下。

DataSet dataSet = new DataSet();

在上述语法格式中,首先建立了一个空的数据集,然后再把建立的数据表放到该数据集里。

另外,也可以通过如下语法格式创建DataSet。

DataSet dataSet = new DataSet("表名");

在上述语法格式中。首先建立的是数据表,然后再建立包含数据表的数据集。

DataSet里包含几种类,以用于数据操作,并且为了方便对DataSet对象的操作,DataSet还提供了一系列的属性和方法。DataSet属性的具体信息如表11-12所示。

表11-12 DataSet属性信息

属  性

说  明

CaseSensitive

获取或设置一个值,该值指示DataTable对象中的字符串比较是否区分大小写

DataSetName

获取或设置当前DataSet的名称

DefaultViewManager

获取DataSet所包含的数据的自定义视图,以允许使用自定义的DataViewManager进行筛选、搜索和导航

EnforceConstraints

获取或设置一个值,该值指示在尝试执行任何更新操作时是否遵循约束规则

ExtendedProperties

获取与DataSet相关的自定义用户信息的集合

HasErrors

获取一个值,指示在此DataSet中的任何DataTable对象是否存在错误

Prefix

获取或设置一个XML前缀,该前缀是DataSet的命名空间的别名

Relations

获取用于将表链接起来并允许从父表浏览到子表的关系的集合

Tables

获取包含在DataSet中的表的集合

DataSet方法的具体信息如表11-13所示。

表11-13 DataSet方法信息

方  法

说  明

Clear

通过移除所有表中的所有行来清除任何数据的DataSet

Copy

复制该DataSet的结构和数据

GetXml

返回存储在DataSet中的数据的XML表示形式

GetXmlSchema

返回存储在DataSet中的数据的XML表示形式的XML架构

HasChanges

获取一个值,该值指示DataSet是否有更改,包括新增行、已删除的行或已修改的行

Merge

将指定的DataSet、DataTable或DataRow对象的数组合并到当前的DataSet或DataTable中

ReadXml

将XML架构和数据读入DataSet

ReadXmlSchema

将XML架构读入DataSet

WriteXml

从DataSet写XML数据,还可以选择写架构

WriteXmlSchema

写XML架构形式的DataSet结构

DataSet集合中常用的类有如下4个。

1.DataTable

DataTable被称为数据表,用来存储数据。一个DataSet可以包含多个DataTable,每个DataTable又可以包含多个行(DataRow)和列(DataColumn)。创建DataTable的方式有如下两种。

(1)当数据加载至DataSet时,会自动创建一些DataTable。

(2)以编程方式创建DataTable的对象,然后将这个对象添加到DataSet的Tables集合中。

从DataSet中提取DataTable的语法格式如下。

DataTable dataTable = dataset.数据表名;

其中,“dataset”是DataSet对象,“dataTable”是DataTable对象。

DataTable类中有很多常用的属性和方法,各属性的具体说明如表11-14所示。

表11-14 DataTable类属性信息

属  性

说  明

CaseSensitive

获取或设置一个值,该值指示DataTable对象中的字符串比较是否区分大小写

ChildRelations

获取此DataTable的子关系的集合

Columns

获取属于该表的列的集合

Constraints

获取或设置一个值,该值指示获取由该表维护的约束的集合

DataSet

获取此表所属的DataSet

DefaultView

获取可能包括筛选视图或游标位置的表的自定义视图

DisplayExpression

获取或设置一个XML前缀,该前缀是DataSet的命名空间的别名

ExtendedProperties

获取自定义用户信息的集合

HasErrors

获取一个值,该值指示该表所属的DataSet的任何表的任何行中是否有错误

ParentRelations

获取该DataTable的父关系的集合

PrimaryKey

获取或设置充当数据表主键的列的数组

Rows

获取属于该表的行的集合

TableName

获取或设置DataTable的名称

DataTable类方法的具体信息如表11-15所示。

表11-15 DataTable类方法信息

方  法

说  明

Clear

清除所有数据的DataTable

Compute

计算用来传递筛选条件的当前行上的给定表达式

Copy

复制该DataTable的结构和数据

ImportRow

将DataRow复制到DataTable中,保留任何属性设置以及初始值和当前值

LoadDataRow

查找和更新特定行。如果找不到任何匹配行,则使用给定值创建新行

Merge

将指定的DataTable与当前的DataTable合并

NewRow

创建与该表具有相同架构的新DataRow

ReadXml

将XML架构和数据读入DataTable

Select

获取DataRow对象的数组

WriteXml

将DataTable的当前内容以XML格式写入

WriteXmlSchema

将DataTable的当前数据结构以XML架构形式写入

2.DataRow

DataRow是给定DataTable(数据表)中的一行数据,或者说是一条记录。DataRow对象的方法提供了对表中数据的插入、删除、更新和查询等功能。提取数据表中的行的语法格式如下。

DataRow dataRow = dataTable.Row[n];

其中,“DataRow”代表数据行类;“dataRow”是DataRow的实例;“dataTable”表示数据表的表实例;“n”是数据表中行的索引(从0开始)。

DataRow类也提供了很多属性和方法,各属性的具体信息如表11-16所示。

表11-16 DataRow类属性信息

属  性

说  明

Item

获取或设置存储在指定列中的数据

ItemArray

通过一个数组来获取或设置此行的所有值

Table

获取该行拥有其架构的DataTable

DataRow类方法的具体信息如表11-17所示。

表11-17 DataRow类方法信息

方  法

说  明

Delete

清除所有数据的DataTable

GetChildRows

计算用来传递筛选条件的当前行上的给定表达式

IsNull

获取一个指定的列是否包含空值的值

3.DataColumn

DataColumn是数据表中的数据列,定义了表的数据结构。如果要获取某列的值,需要在数据行的基础上进行操作。具体的语法格式如下。

string str = dataRow.Column["字段名"],ToString();

也可以使用如下语法格式。

string str = dataRow.Column[索引],ToString()

DataColumn类也提供了很多属性和方法,各属性的具体信息如表11-18所示。

表11-18 DataColumn类属性信息

属  性

说  明

Caption

获取此DataTable的子关系的集合

ColumnName

获取属于该表的列的集合

DefaultValue

获取或设置一个值,该值指示获取由该表维护的约束的集合

Table

获取此表所属的DataSet

DataColumn类方法的具体信息如表11-19所示。

表11-19 DataColumn方法信息

方  法

说  明

SetOrdinal

将DataColumn的序号或位置更改为指定的序号或位置

4.DataRelation

通过使用DataRelation,可以使用DataColumn对象将两个DataTable对象相互关联。例如,在“会员/订单”关系中,会员表是关系的父表,订单表是子表。此关系类似于关系数据库中的主键/外键关系。关系是在父表和子表中的匹配的列之间创建的,两个列的数据类型必须相同。

在创建DataRelation时,它首先验证是否可以建立关系。在将它添加到DataRelationCollection之后,它将禁止使此关系无效的任何更改,以维持此关系。在创建DataRelation和将其添加到DataRelationCollection之间的这段时间,可以对父行或子行进行其他更改。如果这样会使关系不再有效,则会产生异常。

DataRelation类的常用属性信息如表11-20所示。

表11-20 DataRelation类属性信息

属  性

说  明

ChildColumns

获取此关系的子DataColumn对象

ChildKeyConstraint

获取关系的外键约束

ChildTable

获取此关系的子表

DataSet

获取DataRelation所属的DataSet

ExtendedProperties

获取存储自定义属性的集合

ParentColumns

获取作为此DataRelation的父列的DataColumn对象的数组

ParentKeyConstraint

获取聚集约束,它确保DataRelation父列中的值是唯一的

ParentTable

获取此DataRelation的父级DataTable

RelationName

获取或设置用于从DataRelationCollection中检索 DataRelation 的名称

本节将通过一个具体的实例来说明DataSet独特的使用方法。

实例062 获取数据库中指定表的所有内容

源码路径 光盘\daima\11\DataSet\  视频路径 光盘\视频\实例\第11章\062

本实例的功能是通过DataSet获取SQL Server中“duixiang”数据库中表“ziliao”的所有内容。数据库名为“duixiang”,由表“ziliao”构成。表“ziliao”的具体设计结构如表11-21所示。

表11-21 表“ziliao”的设计结构

字 段 名 称

数 据 类 型

是否是主键

默 认 值

功 能 描 述

id

int

递增1

编号

name

char

null

名字

dianhua

char

null

电话

Address

char

null

地址

本实例的具体实现过程如下。

(1)Visual Studio 2012中新创建一个名为“DataSet”的网站项目。

(2)在自动生成的Default.aspx.cs文件中,设置其Page_Load事件读取数据并保存到DataSet中,然后从DataTable中输出所有字段。具体实现代码如下。

  protected void Page_Load(object sender, EventArgs e)
  {
    //连接字符串
    String sqlconn = "Data Source=(local);Initial Catalog=DataSet;Integrated Security=True;User ID =sa;Password =888888";
    SqlConnection myConnection = new SqlConnection(sqlconn);
    //打开数据库连接
    myConnection.Open();
    //读取数据 
    SqlDataAdapter da = new SqlDataAdapter("select * from Products", myConnection);

    DataTable myTable = new DataTable();
    da.Fill(myTable);
    Response.Write("<table>");
    //显示列名字
    Response.Write("<tr bgcolor=#|DAB4B4>");
    foreach (DataColumn myColumn in myTable.Columns)
    {
      Response.Write("<td>" + myColumn.ColumnName + "</td>");
    }
    Response.Write("</tr>");
    //输出所有的字段值
    foreach (DataRow myRow in myTable.Rows)
    {
      Response.Write("<tr>");
      foreach (DataColumn myColumn in myTable.Columns)
      {
        Response.Write("<td>" + myRow[myColumn] + "</td>");
      }
      Response.Write("</tr>");
    }
    Response.Write("</table>");
    //关闭与数据库的连接
    myConnection.Close();
  }
范例123:插入多记录
源码路径:光盘\演练范例\123视频路径:光盘\演练范例\123范例124:更新员工信息
源码路径:光盘\演练范例\124视频路径:光盘\演练范例\124\

上述代码执行后,将在页面中输出Products表中的所有数据,如图11-15所示。

图片 259

图11-15 执行效果

教程类别