《数据库访问技术ADONET程序设计教案.ppt》由会员分享,可在线阅读,更多相关《数据库访问技术ADONET程序设计教案.ppt(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库访问技术ADONET程序设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望n配置配置 DataAdapter 以检索信息以检索信息n使用使用 DataAdapter 填充填充 DataSetn配置配置 DataAdapter 更新后台数据源更新后台数据源n将数据更改保存到数据源将数据更改保存到数据源n冲突处理冲突处理 第第6章章 从现有数据源构造数据集从现有数据源构造数据集 配置配置 DataAdapter 以检索信息以检索信息 nDataAdaptern
2、XxxDataAdapter对象模型对象模型nDataAdapter 类的属性和方法类的属性和方法n创建使用新创建使用新 SELECT 语句的语句的 DataAdaptern创建使用现有存储过程的创建使用现有存储过程的 DataAdapter6.1 配置配置 DataAdapter 以检索信息以检索信息 多媒体演示多媒体演示 创建与填充数据集创建与填充数据集n多媒体多媒体演示演示 创建和填充一个数据集的创建和填充一个数据集的概览概览DataAdapter数据源数据源数据适配器数据适配器数据表数据表数据表数据表数据集数据集数据适配器数据适配器填充填充更新更新填充填充更新更新6.1.1 DataA
3、dapterDataAdapter(续)(续)n数据适配器是数据集与数据源交互的桥梁数据适配器是数据集与数据源交互的桥梁l使相当于数据源本地拷贝的数据集可以与数据源之间进行交互n为数据库提供的主要两种数据适配器为数据库提供的主要两种数据适配器lSqlDataAdapter:不经过OLEDB层直接与SQLServer交互,速度较OleDbDataAdapter快lOleDbDataAdapter:适用于任何可以用OLEDB数据提供者访问的数据源6.1.1 DataAdapterXxxDataAdapter对象模型对象模型sp_SELECTXxxCommandSelectCommandUpdate
4、CommandInsertCommandDeleteCommandXxxDataAdapterXxxCommandXxxCommandXxxCommandXxxConnectionsp_UPDATEsp_INSERTsp_DELETEXxxDataReader6.1.2 XxxDataAdapter对象模型对象模型XxxDataAdapter对象模型(续)对象模型(续)6.1.2 XxxDataAdapter对象模型对象模型XxxDataAdapter对象模型(续)对象模型(续)nCommand 对象对象l通过数据适配器来读取数据源信息的命令对象,并将其保存在数据适配器的SelectComma
5、nd属性中l通过数据适配器可以将数据集中的改变提交到数据源的Command对象中,并保存在数据适配器的InsertCommand、UpdateCommand和DeleteCommand属性中nDataTableMapping(数据表映射)集合(数据表映射)集合lDataTableMapping集合保存了数据集中的表、字段与数据库中的表、字段的映射关系6.1.2 XxxDataAdapter对象模型对象模型DataAdapter 类的属性和方法类的属性和方法6.1.3 DataAdapter 类的属性和方法类的属性和方法n数据适配器的属性数据适配器的属性lSelectCommand 从数据源中读
6、取数据lInsertCommand 将数据由数据集插入数据源lUpdateCommand 将数据集中更新的行写回数据源lDeleteCommand 在数据源中删除数据DataAdapter 类的属性和方法类的属性和方法(续)(续)n数据适配器的方法数据适配器的方法lFill()使用由SelectCommand属性指定的Select语句从数据源中读取/更新数据到数据集lUpdate()对数据集DataTable对象中特定的行调用执行Insert、Delete、Update操作的对应的命令对象6.1.3 DataAdapter 类的属性和方法类的属性和方法创建使用新创建使用新 SELECT 语句的
7、语句的 DataAdaptern创建一个执行创建一个执行SELECT语句的数据适配器语句的数据适配器l对非连接方式应用以只读方式访问数据n创建数据适配器的两种方法创建数据适配器的两种方法l使用数据适配器配置向导l自己手工完成程序代码n在定义数据适配器时必须指定在定义数据适配器时必须指定l一个用于查询的SELECT语句l一个新的或者已经存在的数据库连接Visual Basic 示例示例C#示例示例6.1.4 创建使用新创建使用新 SELECT 语句的语句的 DataAdapter创建使用现有存储过程的创建使用现有存储过程的 DataAdaptern可以编程创建一个执行存储过程可以编程创建一个执行
8、存储过程l为SelectCommand指定一个存储过程l如果需要可以为InsertCommand、UpdateCommand和DeleteCommond指定存储过程n使用向导方式或者手工编码方式创建数据适配器使用向导方式或者手工编码方式创建数据适配器n必须指定必须指定l一个新的或者已经存在的数据库连接l调用的存储过程n实践实践Visual Basic 示例示例C#示例示例6.1.5 创建使用现有存储过程的创建使用现有存储过程的 DataAdapter第第6章章 从现有数据源构造数据集从现有数据源构造数据集n配置配置 DataAdapter 以检索信息以检索信息 n使用使用 DataAdapte
9、r 填充填充 DataSetn配置配置 DataAdapter 更新后台数据源更新后台数据源n将数据将数据更改更改保存到数据源保存到数据源n冲突处理冲突处理 使用使用 DataAdapter 填充填充 DataSetn使用使用 DataAdapter 填充填充 DataSetn为为 DataSet DataSet 指定附加约束指定附加约束n高效地填充高效地填充 Datasetn使用多个使用多个 DataAdapter 填充一个填充一个 DataSet6.2 使用使用 DataAdapter 填充填充 DataSet多媒体多媒体演示演示 数据适配器的数据适配器的 Fill 方法方法n使用数据适配
10、器的使用数据适配器的Fill()方法在数据集对方法在数据集对象中填充与创建象中填充与创建DataTable 对象对象使用使用 DataAdapter 填充填充 DataSetn可以使用数据适配器来填充数据集可以使用数据适配器来填充数据集l调用数据适配器的Fill()方法nFill()方法执行方法执行SelectCommandl使用查询结果的内容和结构填充数据集中的数据表n可以通过下列方法提高性能可以通过下列方法提高性能lDataSet.EnforceConstraints=Falsel对DataTable 对象调用BeginLoadData()方法Visual Basic 示例示例C#示例示例
11、6.2.1 使用使用 DataAdapter 填充填充 DataSet为为 DataSet 指定附加约束指定附加约束n可以在数据结构未知的情况下填充数据集可以在数据结构未知的情况下填充数据集l数据集的数据结构在设计阶段未知l在运行时根据得到的数据来确定数据集的数据结构l可以在运行时通过数据适配器控制如何创建并生成数据集的数据结构Visual Basic 示例示例C#示例示例6.2.2 为为 DataSet 指定附加约束指定附加约束为为 DataSet 指定附加约束(续)指定附加约束(续)6.2.2 为为 DataSet 指定附加约束指定附加约束n使用使用MissingSchemaAction属
12、性控制数据结构生成属性控制数据结构生成lAdd 添加时不保存主键信息lAddWithKey 添加时主键信息载入DataTable 对象lError 用于必须按照事先定义的结构的验证lIgnore 忽略结果集中多出的表和列aDataAdapter.MissingSchemaAction=MissingSchemaAction.Add aDataAdapter.MissingSchemaAction=MissingSchemaAction.AddWithKey aDataAdapter.MissingSchemaAction=MissingSchemaAction.Error aDataAdapt
13、er.MissingSchemaAction=MissingSchemaAction.Ignoren调用调用FillSchema()方法建立一个新的数据集的数据结方法建立一个新的数据集的数据结构构lFillSchema()方法只是将数据结构的信息取到数据集与数据表lFillSchema()方法的语法aDataTableArray=aDataAdapter.FillSchema(aDataSet,_SchemaType.Mapped|SchemaType.Source)lSchemaType的两个属性:Mapped或者Source,用于决定是否将数据表映射集合的信息应用到查询结果为为 DataS
14、et 指定附加约束(续)指定附加约束(续)6.2.2 为为 DataSet 指定附加约束指定附加约束高效地填充高效地填充 Datasetn在填充一个数据集前显式地定义数据结构在填充一个数据集前显式地定义数据结构l数据表、数据列以及数据关联在数据被载入前已经确定l使数据可以被更高效地载入n如何显式地定义一个数据集的数据结构如何显式地定义一个数据集的数据结构l创建一个类型化的数据集类dsCustomers.Customers.BeginLoadData()daCustomers.Fill(dsCustomers.Customers)dsCustomers.Customers.EndLoadData
15、()DataGrid1.DataSource=dsCustomers.Customers.DefaultViewl或者以编程的方式创建数据表、数据列和数据关联等对象Visual Basic 示例示例C#示例示例6.2.3 高效地填充高效地填充 Dataset使用多个使用多个 DataAdapter 填充一个填充一个 DataSet n可以使用多个数据适配器填充一个数据集可以使用多个数据适配器填充一个数据集l每个数据适配器填充数据集中一个独立的表n为每一个数据适配器调用为每一个数据适配器调用Fill()方法方法l在数据集中指定填充哪一个表nVisual Basic 示例示例daCustomers
16、.Fill(dsCustomerOrders.Customers)daOrders.Fill(dsCustomerOrders.Orders)DataGrid1.DataSource=dsCustomerOrders.Customersn实践实践6.2.4 使用多个使用多个 DataAdapter 填充一个填充一个 DataSet实验实验 A 在断开式应用程序中检索数据在断开式应用程序中检索数据n练习练习 1 查看应用程序查看应用程序 n练习练习 2 创建存储员工信息和应用程序创建存储员工信息和应用程序设置的设置的 DataSet n练习练习 3 加载并显示员工信息加载并显示员工信息 n练习练
17、习 4 指定并使用不同的服务器名称指定并使用不同的服务器名称第第6章章 从现有数据源构造数据集从现有数据源构造数据集n配置配置 DataAdapter 以检索信息以检索信息 n使用使用 DataAdapter 填充填充 DataSetn配置配置 DataAdapter 更新后台数据源更新后台数据源n将数据将数据更改更改保存到数据源保存到数据源n冲突处理冲突处理 配置配置 DataAdapter 更新后台数据源更新后台数据源nDataSet 跟踪更改的方式跟踪更改的方式n数据更新命令数据更新命令 n使用数据适配器配置向导设置数据更新命令使用数据适配器配置向导设置数据更新命令6.3 配置配置 Da
18、taAdapter 更新后台数据源更新后台数据源多媒体多媒体演示演示 数据集如何记录数据的更改数据集如何记录数据的更改 n数据集是如何记录数据改变的数据集是如何记录数据改变的DataSet 跟踪更改的方式跟踪更改的方式n每个数据行对象都有一个每个数据行对象都有一个RowState属性属性l标识数据集中每一行数据的状态l状态的类型DataRowState.Added该行已经插入到数据集DataRowState.Deleted该行已经从数据集中删除DataRowState.Detached该行已经创建,但未增加到数据集中的DataRowCollectionDataRowState.Modified
19、该行已经更改DataRowState.Unchanged该行没有发生任何变化Visual Basic 示例示例C#示例示例6.3.1 DataSet 跟踪更改的方式跟踪更改的方式DataSet 跟踪更改的方式跟踪更改的方式(续)(续)n每个数据集都对每一行数据维护两份拷贝每个数据集都对每一行数据维护两份拷贝l当前版本DataRowVersion.Currentif(row.RowState=DataRowState.Added)row“FieldName,DataRowVersion.Current l原始版本DataRowVersion.Originalif(row.RowState=Dat
20、aRowState.Deleted)row“FieldName,DataRowVersion.Original6.3.1 DataSet 跟踪更改的方式跟踪更改的方式数据更新命令数据更新命令n一个一个SqlDataAdapter或或OleDbDataAdapter对象都有一对象都有一些命令对象可以用来更改数据源的数据些命令对象可以用来更改数据源的数据lInsertCommand lUpdateCommand lDeleteCommandn语法:对语法:对Sql和和OleDb的数据适配器以及各个命令对的数据适配器以及各个命令对象完全相同象完全相同public SqlCommand InsertC
21、ommand get;set;Visual Basic 示例示例C#示例示例6.3.2 数据更新命令数据更新命令使用数据适配器配置向导设置数据更新命令使用数据适配器配置向导设置数据更新命令 n可以使用数据适配器向导配置数据更新命令可以使用数据适配器向导配置数据更新命令n向导有下列三种不同的方式产生更新命令向导有下列三种不同的方式产生更新命令l使用SQL语句l创建一个新的存储过程l使用已经存在的存储过程n实践实践6.3.3 使用数据适配器配置向导设置数据更新命令使用数据适配器配置向导设置数据更新命令 第第6章章 从现有数据中构造数据集从现有数据中构造数据集n配置配置 DataAdapter 以检
22、索信息以检索信息 n使用使用 DataAdapter 填充填充 DataSetn配置配置 DataAdapter 更新后台数据源更新后台数据源n将数据更改保存到数据源将数据更改保存到数据源n冲突处理冲突处理将数据更将数据更改改保存到数据源保存到数据源n使用使用DataSet对象的对象的GetChanges方法的时机方法的时机n将更改合并到一个将更改合并到一个DataSet对象对象 n使用使用DataSet更新数据源更新数据源nDataSet接受数据更改的方式接受数据更改的方式6.4 将数据更将数据更改改保存到数据源保存到数据源多媒体演示多媒体演示 使用数据适配器的使用数据适配器的Update方
23、法更新方法更新对应的数据源对应的数据源n数据适配器的数据适配器的Update方法更新对应的数方法更新对应的数据源据源使用使用DataSetDataSet对象的对象的GetChangesGetChanges方法的时机方法的时机 n当需要将数据更改传给由另一个对象使用的另一个当需要将数据更改传给由另一个对象使用的另一个类的时候调用类的时候调用GetChanges()方法方法n代码示例代码示例If dsCustomers.HasChanges(DataRowState.Modified)Then Dim dsTemp As DataSet dsTemp=dsCustomers.GetChanges(
24、DataRowState.Modified)DataGrid1.DataSource=dsTemp.Tables(0).DefaultViewEnd Ifn使用使用GetChanges()方法得到包含该数据集中所有数据方法得到包含该数据集中所有数据更改的数据集的拷贝更改的数据集的拷贝l从数据被载入开始 l从AcceptChanges()方法最后一次被调用开始6.4.1 使用使用DataSetDataSet对象的对象的GetChangesGetChanges方法的时机方法的时机 将更改合并到一个将更改合并到一个DataSet对象对象 n使用使用Merge()方法合并两个数据集:一个原始数据方法合
25、并两个数据集:一个原始数据集以及一个仅包含对原始数据集更改的数据集集以及一个仅包含对原始数据集更改的数据集n代码示例代码示例aDataSet.Merge(anotherDataSet)n被合并的两个数据集要有相同的数据结构被合并的两个数据集要有相同的数据结构6.4.2 将更改合并到一个将更改合并到一个DataSet对象对象 使用使用DataSetDataSet更新数据源更新数据源 n数据适配器的数据适配器的Update()方法对指定的数据表中被更方法对指定的数据表中被更新过的每一行调用适当的新过的每一行调用适当的SQL语句语句lINSERTlUPDATElDELETEn代码示例代码示例aDat
26、aAdapter.Update(aDataSet,aDataTable)Visual Basic 示例示例C#示例示例6.4.3 使用使用DataSetDataSet更新数据源更新数据源 n数据集的数据集的AcceptChanges()方法提交自数据被载入或方法提交自数据被载入或自此次调用起所有该数据集的数据更改自此次调用起所有该数据集的数据更改n代码示例代码示例aDataSet.AcceptChanges()n可以对整个数据集调用可以对整个数据集调用AcceptChanges()方法,或者方法,或者对一个对一个DataTable 对象的一个数据行对象调用对象的一个数据行对象调用n实践实践Da
27、taSetDataSet接受数据更改的方式接受数据更改的方式 6.4.4 DataSetDataSet接受数据更改的方式接受数据更改的方式 Visual Basic 示例示例C#示例示例第第6章章 从现有数据中构造数据集从现有数据中构造数据集n配置配置 DataAdapter 以检索信息以检索信息 n使用使用 DataAdapter 填充填充 DataSetn配置配置 DataAdapter 更新后台数据源更新后台数据源n将数据更改保存到数据源将数据更改保存到数据源 n冲突处理冲突处理冲突处理冲突处理 n发生冲突发生冲突n检测冲突检测冲突n解决冲突解决冲突6.5 冲突处理冲突处理 发生冲突发生
28、冲突n非连接环境使用了开放式并发机制非连接环境使用了开放式并发机制l在一步数据操作完成后数据库锁立即被释放l非连接环境使用开放式并发机制保证其他资源对数据库的同步访问l保守式并发机制在整个数据操作过程中保持数据库的锁l举例说明6.5.1 发生冲突发生冲突发生冲突(续)发生冲突(续)n在更新数据库时会产生数据冲突在更新数据库时会产生数据冲突l另一个应用或服务可能已经更改了数据n举例举例l删除已经不存在的行l更新已经被更新的列n实践实践6.5.1 发生冲突发生冲突检测冲突检测冲突n数据适配器配置向导可以产生用来监测冲突的数据适配器配置向导可以产生用来监测冲突的SQL语句语句n当更新数据库时当更新数
29、据库时l数据更新命令比较数据库中的当前数据与原始值l任何不同都会抛出一个冲突Visual Basic 示例示例C#示例示例6.5.2 检测冲突检测冲突解决冲突解决冲突n使用使用HasErrors属性来测试错误属性来测试错误lDataSet.HasErrorslDataTable.HasErrorslDataRow.HasErrorsVisual Basic 示例示例C#示例示例6.5.3 解决冲突解决冲突解决冲突(续)解决冲突(续)n选择下列一种策略解决冲突选择下列一种策略解决冲突l用数据集中的值覆盖曾经有过的数据操作适用于管理员系统用来强制将数据覆盖数据源中的数据l保持数据集中冲突行以便后续
30、重新更新数据库将冲突的数据保存在数据集中以便重试“使用开放式并发”选项的默认策略6.5.3 解决冲突解决冲突解决冲突(续)解决冲突(续)拒绝冲突的行并在数据集中回滚到初始值拒绝冲突的行并在数据集中回滚到初始值 拒绝在本地数据集中冲突的数据,将数据回滚到从数据库中加载得到的初始值 对冲突的数据集、数据表、数据行调用RejectChanges()方法拒绝冲突的行并从数据库得到最近的数据拒绝冲突的行并从数据库得到最近的数据调用数据集的Clear()方法,重新从数据库中加载数据6.5.3 解决冲突解决冲突回顾回顾学习完本章后,将能够:学习完本章后,将能够:n了解了解DataAdapter的概念的概念n掌握掌握DataAdapter对象的可用属性对象的可用属性n掌握掌握DataAdapter对象的可用方法对象的可用方法n使用新的连接字符串和使用新的连接字符串和SELECT语句创建语句创建DataAdaptern使用现有连接和现有存储过程创建使用现有连接和现有存储过程创建DataAdapter实验实验B 检索并更新检索并更新Customers表与表与Orders表的数据表的数据 n练习练习 1 准备加载和更新数据库中的多个表准备加载和更新数据库中的多个表n练习练习 2 使用多个使用多个DataAdapter填充一个填充一个DataSetn练习练习 3 更新中央数据库更新中央数据库