-
vb.net教程之vb.net数据集(Datasets)的概念
vb.net数据集(Datasets)的概念
1.基本概念
数据集是一种离线了的缓存存储数据,它的结构和数据库一样,具有表格、行、列的一种层次结构,另外还包括了为数据集所定义的数据间的约束和关联关系。
用户可通过.NEt框架的命名空间(NameSpace)来创建和操作数据集。
用户可以通过一些诸如属性(properties)、集合(collections)这些标准的构成来了解Dataset这个概念。如:
(1)数据集(DataSet)包括数据表格的Tables这个集合以及relation的"Relations"集合。
(2)DataTable类包括了数据表格row的"Rows"集合,数据columns的"Column"集合,以及数据relation的"ChildRelations"和"ParentRelations"集合。
(3)DataRow类包括"RowState"属性,这些值是用来显示数据表格首次从数据库被加载后是否被修改过,这个属性的值可以为:"Deleted"、"Modified"、"New"以及"Unchanged"。
2.定义(Type)和未定义(Untyped)的数据集
数据集有定型的和未定型的之分,定型的数据集是基本的DataSet类的一个子类,并且含有图表(.xsd文件),它用来描述数据集所拥有的表格的结构。这些图表文件,包括了表的名字和列名、列所代表的数据的类型信息,以及数据间的约束关系。而一个未定型的数据集则没有这些图表的描述。
在程序中用户可以使用任意两种类型的数据集,然而,定型的数据集可以使得用户对数据的操作更加明了,并且可以减少一些不必要的错误,定型的数据集可以生成一些对象模型,这些模型的第一层次的类(first-class)就是数据集所包含的表和列,假设用户正在对一个定型的数据集进行操作,则可以用如下的语法来指向一个列。
'指向表titles第一行的title_id列
s=dsPub1.titles(0).title_id
但是如果用户是在操作一个未定型的数据集的话,就需要这样编写代码了:
'指向表titles第一行的title_id列
s=dsPubs1.Tables("titles")(0).Columns(title_id")
使用定型类不但可以使代码编制起来更加容易,而且,这种定型类的语法还为用户提供了检查代码正确与否的功能,减少了在指向数据集成员值时代码的错误率。
3.关系表(Related Tables)和关系对象(Related Objects)
如果数据集中包含了多张表,这些表之间可能具有相关联的关系,然而,数据集不象数据库,它并没有关于关联关系的相关信息,所以当用户在处理关系表的时候,可以创建一些关联(relations)来描述这些在数据集中各个表之间的关联关系。关联关系可以通过一些代码,人为地从父行(parent rows)到相关的子行(child rows)。或者从子行再返回到父行。
例如,下面这个关于学校课程设置的例子,有一个关于教师的一个表格,如下表:
其中数据集中可能还包括另一张关于课程信息的表,这张表包括了教师的ID,并把它作为一个外约束键(foreign key),如下表:
因为每个老师不可能只教一门课,所以在课程描述表和教员表之间就存在一种一对多的关系。举一个例子,假设教师i777(李四)教2门课,则可以用数据的关联(data relations)把一个数据表的某个特指的行指向另外一个数据表的一个列,这样就可以在这两个表之间双向地进行查询导航,例如,用户可以从一行描述张三教师的行,浏览到描述它教的课这一行,反之,也可以从描述课程Science999(生物)的行浏览到描述教这门课的教师张三的这一行。
4.更新数据集和数据存储
当用户改变数据集中的数据时,这些改变将要被重新写回到数据库中,类"DataRow"是用来对单独的记录进行操作的,其中它包括属性"RowState",它的值是用来表示自从数据从数据库中第一次被调用以后,行是怎样变化的,该属性的值可以为:"Deleted"、"Modified"、"New"以及"Unchanged"。
为了把这些数据集的变化写回到数据库中,用户可以调用方法"Update",这个方法将会访问"RowState"的属性值,并且决定怎样对数据库进行一系列的操作,如add,edit,delete,将都会被运行。
1.基本概念
数据集是一种离线了的缓存存储数据,它的结构和数据库一样,具有表格、行、列的一种层次结构,另外还包括了为数据集所定义的数据间的约束和关联关系。
用户可通过.NEt框架的命名空间(NameSpace)来创建和操作数据集。
用户可以通过一些诸如属性(properties)、集合(collections)这些标准的构成来了解Dataset这个概念。如:
(1)数据集(DataSet)包括数据表格的Tables这个集合以及relation的"Relations"集合。
(2)DataTable类包括了数据表格row的"Rows"集合,数据columns的"Column"集合,以及数据relation的"ChildRelations"和"ParentRelations"集合。
(3)DataRow类包括"RowState"属性,这些值是用来显示数据表格首次从数据库被加载后是否被修改过,这个属性的值可以为:"Deleted"、"Modified"、"New"以及"Unchanged"。
2.定义(Type)和未定义(Untyped)的数据集
数据集有定型的和未定型的之分,定型的数据集是基本的DataSet类的一个子类,并且含有图表(.xsd文件),它用来描述数据集所拥有的表格的结构。这些图表文件,包括了表的名字和列名、列所代表的数据的类型信息,以及数据间的约束关系。而一个未定型的数据集则没有这些图表的描述。
在程序中用户可以使用任意两种类型的数据集,然而,定型的数据集可以使得用户对数据的操作更加明了,并且可以减少一些不必要的错误,定型的数据集可以生成一些对象模型,这些模型的第一层次的类(first-class)就是数据集所包含的表和列,假设用户正在对一个定型的数据集进行操作,则可以用如下的语法来指向一个列。
'指向表titles第一行的title_id列
s=dsPub1.titles(0).title_id
但是如果用户是在操作一个未定型的数据集的话,就需要这样编写代码了:
'指向表titles第一行的title_id列
s=dsPubs1.Tables("titles")(0).Columns(title_id")
使用定型类不但可以使代码编制起来更加容易,而且,这种定型类的语法还为用户提供了检查代码正确与否的功能,减少了在指向数据集成员值时代码的错误率。
3.关系表(Related Tables)和关系对象(Related Objects)
如果数据集中包含了多张表,这些表之间可能具有相关联的关系,然而,数据集不象数据库,它并没有关于关联关系的相关信息,所以当用户在处理关系表的时候,可以创建一些关联(relations)来描述这些在数据集中各个表之间的关联关系。关联关系可以通过一些代码,人为地从父行(parent rows)到相关的子行(child rows)。或者从子行再返回到父行。
例如,下面这个关于学校课程设置的例子,有一个关于教师的一个表格,如下表:
其中数据集中可能还包括另一张关于课程信息的表,这张表包括了教师的ID,并把它作为一个外约束键(foreign key),如下表:
因为每个老师不可能只教一门课,所以在课程描述表和教员表之间就存在一种一对多的关系。举一个例子,假设教师i777(李四)教2门课,则可以用数据的关联(data relations)把一个数据表的某个特指的行指向另外一个数据表的一个列,这样就可以在这两个表之间双向地进行查询导航,例如,用户可以从一行描述张三教师的行,浏览到描述它教的课这一行,反之,也可以从描述课程Science999(生物)的行浏览到描述教这门课的教师张三的这一行。
4.更新数据集和数据存储
当用户改变数据集中的数据时,这些改变将要被重新写回到数据库中,类"DataRow"是用来对单独的记录进行操作的,其中它包括属性"RowState",它的值是用来表示自从数据从数据库中第一次被调用以后,行是怎样变化的,该属性的值可以为:"Deleted"、"Modified"、"New"以及"Unchanged"。
为了把这些数据集的变化写回到数据库中,用户可以调用方法"Update",这个方法将会访问"RowState"的属性值,并且决定怎样对数据库进行一系列的操作,如add,edit,delete,将都会被运行。
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比