《数据库访问技术ADONET程序设计.ppt》由会员分享,可在线阅读,更多相关《数据库访问技术ADONET程序设计.ppt(47页珍藏版)》请在三一办公上搜索。
1、数据库访问技术ADO.NET程序设计,第1章 以数据为中心的应用程序和 ADO.NET第2章 连接数据源第3章 执行连接环境下的数据库操作第4章 构建 DataSet 第5章 使用 ADO.NET 读取和写入 XML第6章 从现有数据源构造数据集第7章 构建和应用 ADO.NET 的 Web 服务,配置 DataAdapter 以检索信息使用 DataAdapter 填充 DataSet配置 DataAdapter 更新后台数据源将数据更改保存到数据源冲突处理,第6章 从现有数据源构造数据集,配置 DataAdapter 以检索信息,DataAdapterXxxDataAdapter对象模型D
2、ataAdapter 类的属性和方法创建使用新 SELECT 语句的 DataAdapter创建使用现有存储过程的 DataAdapter,6.1 配置 DataAdapter 以检索信息,多媒体演示 创建与填充数据集,多媒体演示 创建和填充一个数据集的概览,DataAdapter,数据源,数据适配器,数据表,数据表,数据集,数据适配器,填充,更新,填充,更新,6.1.1 DataAdapter,DataAdapter(续),数据适配器是数据集与数据源交互的桥梁使相当于数据源本地拷贝的数据集可以与数据源之间进行交互为数据库提供的主要两种数据适配器SqlDataAdapter:不经过OLEDB层
3、直接与SQLServer交互,速度较OleDbDataAdapter快OleDbDataAdapter:适用于任何可以用OLEDB数据提供者访问的数据源,6.1.1 DataAdapter,XxxDataAdapter对象模型,sp_SELECT,XxxCommand,SelectCommand,UpdateCommand,InsertCommand,DeleteCommand,XxxDataAdapter,XxxCommand,XxxCommand,XxxCommand,XxxConnection,sp_UPDATE,sp_INSERT,sp_DELETE,XxxDataReader,6.1
4、.2 XxxDataAdapter对象模型,XxxDataAdapter对象模型(续),6.1.2 XxxDataAdapter对象模型,XxxDataAdapter对象模型(续),Command 对象通过数据适配器来读取数据源信息的命令对象,并将其保存在数据适配器的SelectCommand属性中通过数据适配器可以将数据集中的改变提交到数据源的Command对象中,并保存在数据适配器的InsertCommand、UpdateCommand和DeleteCommand属性中DataTableMapping(数据表映射)集合DataTableMapping集合保存了数据集中的表、字段与数据库中的
5、表、字段的映射关系,6.1.2 XxxDataAdapter对象模型,DataAdapter 类的属性和方法,6.1.3 DataAdapter 类的属性和方法,数据适配器的属性SelectCommand 从数据源中读取数据InsertCommand 将数据由数据集插入数据源UpdateCommand 将数据集中更新的行写回数据源DeleteCommand 在数据源中删除数据,DataAdapter 类的属性和方法(续),数据适配器的方法Fill()使用由SelectCommand属性指定的Select语句从数据源中读取/更新数据到数据集Update()对数据集DataTable对象中特定的行
6、调用执行Insert、Delete、Update操作的对应的命令对象,6.1.3 DataAdapter 类的属性和方法,创建使用新 SELECT 语句的 DataAdapter,创建一个执行SELECT语句的数据适配器对非连接方式应用以只读方式访问数据创建数据适配器的两种方法使用数据适配器配置向导自己手工完成程序代码在定义数据适配器时必须指定一个用于查询的SELECT语句一个新的或者已经存在的数据库连接,Visual Basic 示例,C#示例,6.1.4 创建使用新 SELECT 语句的 DataAdapter,创建使用现有存储过程的 DataAdapter,可以编程创建一个执行存储过程为
7、SelectCommand指定一个存储过程如果需要可以为InsertCommand、UpdateCommand和DeleteCommond指定存储过程使用向导方式或者手工编码方式创建数据适配器必须指定一个新的或者已经存在的数据库连接调用的存储过程实践,Visual Basic 示例,C#示例,6.1.5 创建使用现有存储过程的 DataAdapter,第6章 从现有数据源构造数据集,配置 DataAdapter 以检索信息 使用 DataAdapter 填充 DataSet配置 DataAdapter 更新后台数据源将数据更改保存到数据源冲突处理,使用 DataAdapter 填充 DataS
8、et,使用 DataAdapter 填充 DataSet为 DataSet 指定附加约束高效地填充 Dataset使用多个 DataAdapter 填充一个 DataSet,6.2 使用 DataAdapter 填充 DataSet,多媒体演示 数据适配器的 Fill 方法,使用数据适配器的Fill()方法在数据集对象中填充与创建DataTable 对象,使用 DataAdapter 填充 DataSet,可以使用数据适配器来填充数据集调用数据适配器的Fill()方法Fill()方法执行SelectCommand使用查询结果的内容和结构填充数据集中的数据表可以通过下列方法提高性能DataSet
9、.EnforceConstraints=False对DataTable 对象调用BeginLoadData()方法,Visual Basic 示例,C#示例,6.2.1 使用 DataAdapter 填充 DataSet,为 DataSet 指定附加约束,可以在数据结构未知的情况下填充数据集数据集的数据结构在设计阶段未知在运行时根据得到的数据来确定数据集的数据结构可以在运行时通过数据适配器控制如何创建并生成数据集的数据结构,Visual Basic 示例,C#示例,6.2.2 为 DataSet 指定附加约束,为 DataSet 指定附加约束(续),6.2.2 为 DataSet 指定附加约束
10、,使用MissingSchemaAction属性控制数据结构生成Add 添加时不保存主键信息AddWithKey 添加时主键信息载入DataTable 对象Error 用于必须按照事先定义的结构的验证Ignore 忽略结果集中多出的表和列,aDataAdapter.MissingSchemaAction=MissingSchemaAction.Add,aDataAdapter.MissingSchemaAction=MissingSchemaAction.AddWithKey,aDataAdapter.MissingSchemaAction=MissingSchemaAction.Error,
11、aDataAdapter.MissingSchemaAction=MissingSchemaAction.Ignore,调用FillSchema()方法建立一个新的数据集的数据结构FillSchema()方法只是将数据结构的信息取到数据集与数据表FillSchema()方法的语法aDataTableArray=aDataAdapter.FillSchema(aDataSet,_SchemaType.Mapped|SchemaType.Source)SchemaType的两个属性:Mapped或者Source,用于决定是否将数据表映射集合的信息应用到查询结果,为 DataSet 指定附加约束(续
12、),6.2.2 为 DataSet 指定附加约束,高效地填充 Dataset,在填充一个数据集前显式地定义数据结构数据表、数据列以及数据关联在数据被载入前已经确定使数据可以被更高效地载入如何显式地定义一个数据集的数据结构创建一个类型化的数据集类()daCustomers.Fill(dsCustomers.Customers)()DataGrid1.DataSource=或者以编程的方式创建数据表、数据列和数据关联等对象,Visual Basic 示例,C#示例,6.2.3 高效地填充 Dataset,使用多个 DataAdapter 填充一个 DataSet,可以使用多个数据适配器填充一个数据
13、集每个数据适配器填充数据集中一个独立的表为每一个数据适配器调用Fill()方法在数据集中指定填充哪一个表Visual Basic 示例daCustomers.Fill(dsCustomerOrders.Customers)daOrders.Fill(dsCustomerOrders.Orders)DataGrid1.DataSource=dsCustomerOrders.Customers实践,6.2.4 使用多个 DataAdapter 填充一个 DataSet,实验 A 在断开式应用程序中检索数据,练习 1 查看应用程序 练习 2 创建存储员工信息和应用程序设置的 DataSet 练习 3
14、 加载并显示员工信息 练习 4 指定并使用不同的服务器名称,第6章 从现有数据源构造数据集,配置 DataAdapter 以检索信息 使用 DataAdapter 填充 DataSet配置 DataAdapter 更新后台数据源将数据更改保存到数据源冲突处理,配置 DataAdapter 更新后台数据源,DataSet 跟踪更改的方式数据更新命令 使用数据适配器配置向导设置数据更新命令,6.3 配置 DataAdapter 更新后台数据源,多媒体演示 数据集如何记录数据的更改,数据集是如何记录数据改变的,DataSet 跟踪更改的方式,每个数据行对象都有一个RowState属性标识数据集中每一
15、行数据的状态状态的类型DataRowState.Added该行已经插入到数据集DataRowState.Deleted该行已经从数据集中删除DataRowState.Detached该行已经创建,但未增加到数据集中的DataRowCollectionDataRowState.Modified该行已经更改DataRowState.Unchanged该行没有发生任何变化,Visual Basic 示例,C#示例,6.3.1 DataSet 跟踪更改的方式,DataSet 跟踪更改的方式(续),每个数据集都对每一行数据维护两份拷贝当前版本DataRowVersion.Currentif(row.Ro
16、wState=DataRowState.Added)row“FieldName,DataRowVersion.Current 原始版本DataRowVersion.Originalif(row.RowState=DataRowState.Deleted)row“FieldName,DataRowVersion.Original,6.3.1 DataSet 跟踪更改的方式,数据更新命令,一个SqlDataAdapter或OleDbDataAdapter对象都有一些命令对象可以用来更改数据源的数据InsertCommand UpdateCommand DeleteCommand语法:对Sql和Ol
17、eDb的数据适配器以及各个命令对象完全相同public SqlCommand InsertCommand get;set;,Visual Basic 示例,C#示例,6.3.2 数据更新命令,使用数据适配器配置向导设置数据更新命令,可以使用数据适配器向导配置数据更新命令向导有下列三种不同的方式产生更新命令使用SQL语句创建一个新的存储过程使用已经存在的存储过程实践,6.3.3 使用数据适配器配置向导设置数据更新命令,第6章 从现有数据中构造数据集,配置 DataAdapter 以检索信息 使用 DataAdapter 填充 DataSet配置 DataAdapter 更新后台数据源将数据更改保
18、存到数据源冲突处理,将数据更改保存到数据源,使用DataSet对象的GetChanges方法的时机将更改合并到一个DataSet对象 使用DataSet更新数据源DataSet接受数据更改的方式,6.4 将数据更改保存到数据源,多媒体演示 使用数据适配器的Update方法更新对应的数据源,数据适配器的Update方法更新对应的数据源,使用DataSet对象的GetChanges方法的时机,当需要将数据更改传给由另一个对象使用的另一个类的时候调用GetChanges()方法代码示例If dsCustomers.HasChanges(DataRowState.Modified)Then Dim d
19、sTemp As DataSet dsTemp=dsCustomers.GetChanges(DataRowState.Modified)DataGrid1.DataSource=dsTemp.Tables(0).DefaultViewEnd If使用GetChanges()方法得到包含该数据集中所有数据更改的数据集的拷贝从数据被载入开始 从AcceptChanges()方法最后一次被调用开始,6.4.1 使用DataSet对象的GetChanges方法的时机,将更改合并到一个DataSet对象,使用Merge()方法合并两个数据集:一个原始数据集以及一个仅包含对原始数据集更改的数据集代码示例
20、aDataSet.Merge(anotherDataSet)被合并的两个数据集要有相同的数据结构,6.4.2 将更改合并到一个DataSet对象,使用DataSet更新数据源,数据适配器的Update()方法对指定的数据表中被更新过的每一行调用适当的SQL语句INSERTUPDATEDELETE代码示例aDataAdapter.Update(aDataSet,aDataTable),Visual Basic 示例,C#示例,6.4.3 使用DataSet更新数据源,数据集的AcceptChanges()方法提交自数据被载入或自此次调用起所有该数据集的数据更改代码示例aDataSet.Accep
21、tChanges()可以对整个数据集调用AcceptChanges()方法,或者对一个DataTable 对象的一个数据行对象调用实践,DataSet接受数据更改的方式,6.4.4 DataSet接受数据更改的方式,Visual Basic 示例,C#示例,第6章 从现有数据中构造数据集,配置 DataAdapter 以检索信息 使用 DataAdapter 填充 DataSet配置 DataAdapter 更新后台数据源将数据更改保存到数据源 冲突处理,冲突处理,发生冲突检测冲突解决冲突,6.5 冲突处理,发生冲突,非连接环境使用了开放式并发机制在一步数据操作完成后数据库锁立即被释放非连接环
22、境使用开放式并发机制保证其他资源对数据库的同步访问保守式并发机制在整个数据操作过程中保持数据库的锁举例说明,6.5.1 发生冲突,发生冲突(续),在更新数据库时会产生数据冲突另一个应用或服务可能已经更改了数据举例删除已经不存在的行更新已经被更新的列实践,6.5.1 发生冲突,检测冲突,数据适配器配置向导可以产生用来监测冲突的SQL语句当更新数据库时数据更新命令比较数据库中的当前数据与原始值任何不同都会抛出一个冲突,Visual Basic 示例,C#示例,6.5.2 检测冲突,解决冲突,使用HasErrors属性来测试错误DataSet.HasErrorsDataTable.HasErrors
23、DataRow.HasErrors,Visual Basic 示例,C#示例,6.5.3 解决冲突,解决冲突(续),选择下列一种策略解决冲突用数据集中的值覆盖曾经有过的数据操作适用于管理员系统用来强制将数据覆盖数据源中的数据保持数据集中冲突行以便后续重新更新数据库将冲突的数据保存在数据集中以便重试“使用开放式并发”选项的默认策略,6.5.3 解决冲突,解决冲突(续),拒绝冲突的行并在数据集中回滚到初始值 拒绝在本地数据集中冲突的数据,将数据回滚到从数据库中加载得到的初始值 对冲突的数据集、数据表、数据行调用RejectChanges()方法拒绝冲突的行并从数据库得到最近的数据调用数据集的Clear()方法,重新从数据库中加载数据,6.5.3 解决冲突,回顾,学习完本章后,将能够:了解DataAdapter的概念掌握DataAdapter对象的可用属性掌握DataAdapter对象的可用方法使用新的连接字符串和SELECT语句创建DataAdapter使用现有连接和现有存储过程创建DataAdapter,实验B 检索并更新Customers表与Orders表的数据,练习 1 准备加载和更新数据库中的多个表练习 2 使用多个DataAdapter填充一个DataSet练习 3 更新中央数据库,
链接地址:https://www.31ppt.com/p-6296621.html