仿照在内部存款和储蓄器中的数据库DataSet相关的类w88优德官网电脑版

发布时间:2019-03-15  栏目: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

这些类只是在内部存款和储蓄器中模拟出了三个数据库,其实质是1个汇集也正是首先个图中的DataTableCollnection,数据表的集纳。

1.1DataTable数据表

DataTable与数据库中table的差异:

      
DataTable是虚构在内部存储器中的数据表,不是持久化数据,而数据库中的数据是持久化数据,在调用DataAdapter对象的Update()方法此前,DataTable对象影响不断数据库中的数据表,相当于说Update()方法能将DataTable中的数据持久化到数据库中。

【这里最窘迫下本人博客中这篇DataTable的AcceptChanges()方法和DataRow的RowState属性

 

获取DataTable对象的章程有很多,上边就罗列下:

  1. 运用构造函数;
  2. 透过DataSet对象获得;
  3. 调用DataTable对象的Clone()方法获得表结构(不分包表数据)生成1个新的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,奥莱Db,Oracle请看第③点Data艾达pter介绍【连接数据库的上进历史】。

这些SqlCommandBuilder见名知意,他是1个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,奥莱,那作者就理一下有关连接数据库的前进历史:

  1. odbc在此之前:使用的两样的数据库都有独家对应数据库访问API,领导说换数据库,这就需求修改源码,那会整死程序猿的;
  2. odbc时:定义了四个公共数据访问层,能够用来拜访差不多全体的关系型数据库,各样数据库厂商提供相应的驱动即可;
  3. ole
    db时:基于odbc,不仅能够访问关系型数据库,还是能够访问非关系型数据
  4. 那什么样是ADO呢?ADO是面向对象的结果,能够成功和ole db一样,但比ole
    db更简短,也正是说,ADO将ole
    db中的方法封装成三个类,只要首固然捌个类的应用;
  5. ADO.NET呢?那当中追加了2个SqlClient,专门用于访问SQL
    Server,也是它访问SQL Server最快。

自家也是重点利用SqlDataAdapter那么些类,即使论通用性,当然是采取奥莱DbAdapter会好一点。

下边就讲一下SqlDataAdapter那几个类:

它有八个构造函数:

w88优德官网电脑版 5

在此间也得以讲一下SqlDataAdapter和SqlDataReader的分别:

     
SqlDataAdapter的实例是一回将须求的结果集获得内部存款和储蓄器中,并自行关闭数据库连接(现在数据库连接都称之为conn);而SqlDataReader的实例是调用Reader()方法,它维持了3个指南针的成效,3次读取一个元组并活动向下移动一人,并且不得不从结果集中的首先行先河,无法悔过自新(上一篇博客有讲过SqlDataReader对象),而且在这几个运动指针读取元组的进度中,conn一贯保持延续,供给手动去关闭,或许利用using代码块。就算只是要询问数据,使用SqlData里德r会更好一点,因为她速度比SqlDataAdapter要快。

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

SqlDateAdapter用于将数据库中的数据填充到DataTable或许DataSet中

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

【点击那里回到主页】

留下评论