拟在内存中的数据库DataSet相关的类似

发布时间:2018-10-24  栏目:w88优德官网电脑版  评论:0 Comments

这首连在齐一样篇DataReader相关类。

下两截话是于msdn官网摘下来:

      .NET Framework
数据提供程序是专程为数操作与迅速、只进、只念访问数如果计划的组件。Connection

对象提供到数据源的连天。 使用 Command
对象足以拜用于返回数据、修改数据、运行存储过程以及发送或找参数信息的数据库命令。
DataReader 可打数据源提供高性能的数据流。 最后,DataAdapter
DataSet 对象同数据源之间从至桥作用。 DataAdapter 使用
Command 对象在数量源中执行 SQL 命令以向 DataSet
中加载数据,并将针对 DataSet 中数的转写回数据源中。

      ADO.NET DataSet
是专程为单独为其他数据源的多少看使规划之。因此,它可用于多种不同的数据源,用于
XML 数据,或用来管理应用程序本地的数量。 DataSet
包含一个要多只DataTable 对象的集,这些目标由数据行和数据列以及关于
DataTable 对象吃数的主键、外键、约束与关系消息做。

w88优德官网电脑版 1

说一样下自己本着上图的知情,图中蓝色部分:可以当数据库被找到相应之映照对象(姑且让自己这么说),黄色部分是C#其间为操作数据便宜,添加的近乎。


近些年于习ADO.NET
Framwork类库:涉及到了DataSet相关的好像,就想好好整理下同样多样类的关联,其中涉嫌到之近乎从小到充分出:

  1. DateColumn
  2. DataRow
  3. Constraint
  4. DataTable 
  5. DataRelation
  6. DataSet
  7. SqlCommandBuilder
  8. DataAdapter

这些类似都是用以在内存中模拟一个数据库,方便程序的直白操作,免去了频繁连连数据库的岁月吃。

看来他们之名即使横知道凡是开啊的,下面列一个表说明下她俩的力量:

类名

功能

备注
DateColumn 创建列,并设置相关属性(数据类型,列名,约束等) 对应数据库中的列
DataRow 根据列属性创建行数据(和数据库中的insert类似,但不一样) 对应数据库中的行
Constraint 设置或获取约束  
DataTable 创建一个数据表,可以将DateColumn和DataRow的实例添加到数据表中 对应数据库中的数据表
DataRelation 将两个表建立父子关系  
DataSet 创建一个数据库,可以添加DataTable的实例 对应数据库
SqlCommandBuilder 会自动构建对DataTable的insert,delete,updates操作Sql命令 还没想到备注
DataAdapter 用于将数据源中的数据填充到DataSet或DataTable实例中,
并将操作最后的DataSet或DataTable实例,update到数据库中
还没想到备注

 


1、DataSet

DataSet的继续层次结构是:

w88优德官网电脑版 2

此类似才是以内存中拟出了一个数据库,其面目是一个汇聚也就是首先独图被的DataTableCollnection,数据表的聚集。

1.1DataTable数据表

DataTable与数据库中table的分别:

      
DataTable是杜撰在内存中的数据表,不是持久化数据,而数据库中之多少是持久化数据,在调用DataAdapter对象的Update()方法之前,DataTable对象影响不了数据库被的数据表,也就是说Update()方法会用DataTable中之数持久化到数据库被。

【这里太为难下自家博客中立即篇DataTable的AcceptChanges()方法和DataRow的RowState属性】

 

获DataTable对象的章程产生成千上万,下面就罗列下:

  1. 用构造函数;
  2. 透过DataSet对象获得;
  3. 调用DataTable对象的Clone()方法得到表结构(不含表数据)生成一个新的DataTable对象;
  4. 调用DataTable对象的Copy()方法得到表结构与表数据生成一个新DataTable对象;

DataTable常用的性质:

属性名 功能 返回值或设置值
CaseSensitive 获取或设置表中数据是否区分大小写 bool类型
ChildRelations 获取该表子关系的集合 DataRelationCollection类型
ParentRelations 获取该表父关系的集合 DataRelationCollection类型
TableName 获取或设置该表的名字 String类型
Columns 获取该表中列的集合 DataColumnCollection类型
Rows 获取该表行的集合 DataRowCollection类型
Constraints 获取table中约束的集合 ConstraintsCollection类型
DataSet 获取该表所属的DataSet对象 DateSet类型
DefaultView 获取可能包含筛选视图或游标位置的自定义视图 DataView类型
HasErrors 获取一个值,该值表示该表所属的DataSet对象中的然后表的任何行中是否有错误 bool类型
MinimumCapacity 获取或设置该表的最初的起始大小 int类型
PrimaryKey 获取或设置充当该表主键的列的数组 DataColumn[]类型

 

DateTable常用之法子:

方法名 功能 备注
AcceptChanges() 保存对表的修改 参照【DataTable的AcceptChanges()和DataRow的RowState属性
GetChanges() 获取被修改【增删改】的行组成的表 一般会在AcceptChanges()方法前调用,
要不然Update()时会包空参数异常
Select() 获取所有行组成的数组 返回值为DataRow[]
GetChanges(DataRowState rowStates) 获取指定状态位的行组成的表  
GetErrors() 获取有错误的行的数组  
Clear() 清空表数据,但是表结构和约束依然存在  
Clone() 克隆表结构,包括约束,不包含数据  
Copy() 复制表,包括结构约束,数据  
Compute(string expression, string filter) 计算用来传递筛选条件的当前行上的给定表达式  

 

1.1.1DataColumn数据列

好像于数据库中表的特性。

常用属性:

属性名 功能 返回值或设置值
AllowDBNull 获取或设置该列是否可以为空(默认可以为空) true说明可以为空
AutoIncrement 设置或设置是否可以自增(默认不自增) true说明是自增
AutoIncrementSeed 设置自增列的初始值(默认为0) long类型
AutoIncrementStep 设置自增的步长(默认为1) long类型
Unique 设置该列中不允许有重复值(默认false,可以重复) bool类型
DataType 设置或获取该列存储的数据类型 Type类型
DefaultValue 在创建新行时获取或设置列的默认值 object类型
ColumnName 获取或设置该列的名字 string类型
Table 获得该列所属的DataTable对象 DataTable类型
MaxLength 获取或设置文本列能存储文本的最大长度 int类型
ReadOnly 获取或设置列的只读属性(默认值为false可读可写) bool类型(默认false)
Ordinal 获取列在表中的位置(从零开始) int类型(找不到就返回-1)
Expression 用于设置或获取表达式,用于筛选或计算列中值或创建聚合列 string类型

1.1.2DataRow数据行

看似于数据库中表的元组。

常用属性:

属性名 功能 备注
HasErrors 获取该行是否有错误 如果该行包含错误,则为 true;否则,为 false。
ItemArray 获取或设置此行所有值 返回值为object[]数组
RowError 获取或设置该行的自定义错误说明 返回值为string类型,是自定义的错误说明
RowState 该行的状态(一共五个状态) 参照【DataTable的AcceptChanges()和DataRow的RowState属性
Table 获取该行所属的表对象 返回值为DataTable类型

1.1.3DataView数据视图

仿佛于数据库被的视图。

常用属性:

属性名 功能 备注
Sort 获取或设置 DataView 的一个或多个排序列以及排序顺序。  
     
     
     
     
     
     

 


2、SqlCommandBuilder

脚是DbCommandBuilder的接轨层次图,不是SqlCommandBuilder的,

w88优德官网电脑版 3

齐图中之Odbc,OleDb,Oracle请圈第三沾DataAdapter介绍【连接数据库的上进历史】。

这个SqlCommandBuilder见名知意,他是一个Sql命令的建造者,用于生成Sql命令,它是基于DataTable中每行的RowState和数据表的主键来生成sql语句的,然后绑定SqlDataAdapter对象,当SqlDataAdapter对象调用Update()方法创新数据库时,他即见面自动生成sql语句。

SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
//或者向下面这样
SqlCommandBuilder scb2 = new SqlCommandBuilder();
scb2.DataAdapter = adapter;

数据表的主键大家还掌握,那是每行的RowState是呀东西?

事实上我们在针对DataTable中的实践开展多删改操作时,这些实践都未曾并不曾让转,而是其RowState这个特性为修改了,这属性是一个独自念之枚举类型。

【详细的RowState请看自己博客中就篇DataTable的AcceptChanges()方法和DataRow的RowState属性】

【详细的SQLCommandBuilder构建T-Sql命令请圈这篇SqlCommandBuilder构建T-sql语句】


3、DataAdapter

连续层次图:

w88优德官网电脑版 4

图里写及了ODBC,Ole,那自己便张罗一下关于连接数据库的向上历史:

  1. odbc之前:使用的两样的数据库都发生分别对应数据库访问API,领导说易数据库,那就待修改源码,这会整死程序猿的;
  2. odbc时:定义了一个公共数据w88优德官网电脑版访问层,可以用来聘几乎所有的事关项目数据库,逐一数据库厂商提供对应的驱动即可;
  3. ole
    db时:基于odbc,不仅可看关联项目数据库,还得拜非关系型数据
  4. 那么什么是ADO呢?ADO是面向对象的结果,能够做到与ole db一样,但比ole
    db更简便,也就是说,ADO将ole
    db中的不二法门封装成多单类似,只要主要是九独八九不离十的行使;
  5. ADO.NET呢?这个被增了一个SqlClient,专门用来访问SQL
    Server,也是她访问SQL Server最抢。

自也是要使用SqlDataAdapter这个近乎,如果以通用性,当然是运用OleDbAdapter会好一些。

脚就是摆一下SqlDataAdapter这个看似:

它们产生四单构造函数:

w88优德官网电脑版 5

于此吧可称一下SqlDataAdapter和SqlDataReader的区分:

     
SqlDataAdapter的实例是一模一样浅用需之结果集将到内存中,并活动关闭数据库连接(以后数据库连接都称之为conn);而SqlDataReader的实例是调用Reader()方法,它维持了一个指南针的作用,一不良读取一个元组并自行为下活动一位,并且只能从结果集中的首先执开始,不能够悔过自新(上平等首博客有摆过SqlDataReader对象),而且每当是倒指针读取元组的过程被,conn一直维持连续,需要手动去关,或者以using代码块。如果光是设查询数据,使用SqlDataReader会更好一些,因为他速度比较SqlDataAdapter要抢。

          SqlDataAdapter内部也是经过SqlDataReader拿取数据库的多寡。

SqlDateAdapter用于将数据库中的数量填到DataTable或者DataSet中

未完待续==================================

【点击这里回到主页】

留下评论