第7章 在断开连接的环境中 编辑和更新数据.

Slides:



Advertisements
Similar presentations
教育技术装备统计系统 使用培训 教育部基础教育司 教育部教育管理信息中心.
Advertisements

第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
第7章利用ADO.NET 进行数据访问.
ADO .NET 簡介.
第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
第6章 ADO.NET数据库编程.
Oracle数据库 Oracle 子程序.
学习情境四 任务9 ADO.NET数据访问.
第3章 数据源连接.
在PHP和MYSQL中实现完美的中文显示
Visual C# 2010 程式設計經典 第15章 ADO .NET與資料工具.
Hadoop I/O By ShiChaojie.
ADO.NET.
課程名稱:資料庫系統 授課老師:李春雄 博士
上述代码规范了 INSERT 语句的编写规范,其中:
第2章 ADO.NET 2.0概述.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
第4章 在连接环境中获取数据.
大学计算机基础 典型案例之一 构建FPT服务器.
第9章 事务.
走进编程 程序的顺序结构(二).
辅导课程六.
操作数据库 C#程序设计课程组.
第六单元 ADO.net数据库操作 劳动和社会保障部全国计算机信息高新技术考试指定教材——ASP.NET.
网络常用常用命令 课件制作人:谢希仁.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一讲: 基本流程(1).
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
数据库技术.
C# 程序设计教程 同济大学计算机系基础学科组
第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
程序设计工具实习 Software Program Tool
第五讲 酒店客房管理系统(一) 教育部“十二五”职业教育国家规划教材
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第十讲 学生成绩管理系统(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
顺序表的删除.
第四章 团队音乐会序幕: 团队协作平台的快速创建
通讯录管理系统设计 常州工程职业技术学院 计算机技术系.
第 10 章 ADO.NET與XML.
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
VisComposer 2019/4/17.
商业分析平台-语义元数据 用友集团技术中心 边传猛 2013年 11月 06日.
VB与Access数据库的连接.
实验七 安全FTP服务器实验 2019/4/28.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
Web安全基础教程
ASP.NET实用教程 清华大学出版社 第9章数据库应用 教学目标 教学重点 教学过程 2019年5月3日.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
数据库系统与应用实验 基于SQL Server 2005.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
Delphi 7.0开发示例.
Python 环境搭建 基于Anaconda和VSCode.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
VB与Access数据库的连接.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
再戰DataSet.
WEB程序设计技术 数据库操作.
第四章 UNIX文件系统.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
Presentation transcript:

第7章 在断开连接的环境中 编辑和更新数据

数据访问技术—— ADO.NET 2.0 第1章: 数据库基础 第 2 章: ADO.NET 2.0概述 第 3 章: 数据源连接 第 4 章: 在连接环境中获取数据 第 5 章: 构建DataSet 第 6 章: 类型化DataSet 第 7 章: 在断开连接的环境中编辑和更新数据 第 8章: 数据的排序、搜索和过滤 第 9 章: 事务 第 10 章: ADO.NET和XML 2

目标 掌握创建DataAdapter及预览DataAdapter结果的方法 了解DataAdapter类 本章学习目标: 掌握创建DataAdapter及预览DataAdapter结果的方法 了解DataAdapter类 掌握如何使用DataAdapter查询表和填充DataSet 掌握配置DataAdapter的方法 掌握使用DataAdapter和DataSet更新数据 掌握DataRow的RowState属性 了解如何接受和拒绝对数据所做的更改 3

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题

DataAdapter简介 在ADO.NET中,DataSet是数据在内存中的表示形式,它提供了独立于数据源的关系编程模型。

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 6

.NET Framework中的DataAdapter 类 描述 System.Data.SqlClient.SqlDataAdapter SQL Server.NET Framework数据提供程序DataAdapter类 System.Data.OleDbClient.OleDbDataAdapter OLE DB .NET Framework数据提供程序DataAdapter类 System.Data.Odbc.OdbcDataAdapter ODBC .NET Framework数据提供程序DataAdapter类 System.Data.OracleClient.OracleDataAdapter Oracle .NET Framework数据提供程序DataAdapter类

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge() 小结 实验 习题 8

创建DataAdapter Visual Studio 2005提供了以下几种方法来创建DataAdapter。

1 创建DataAdapter 通过Visual Studio 2005创建DataAdapter的步骤如下。 拖曳一个“SqlDataAdapter”控件到窗体设计器中,启动“数据适配器配置向导”,选择MySample数据连接,单击“下一步”按钮。 1

创建DataAdapter (续) 7.3.1 通过Visual Studio 2005创建DataAdapter Visual Studio 2005显示“选择命令类型”对话框,选择“使用SQL语句”单选项,单击“下一步”按钮。 2 11

3 创建DataAdapter (续) Visual Studio 2005显示“生成SQL语句”对话框。 7.3.1 通过Visual Studio 2005创建DataAdapter Visual Studio 2005显示“生成SQL语句”对话框。 3 12

创建DataAdapter (续) 7.3.1 通过Visual Studio 2005创建DataAdapter 单击“查询生成器”按钮,Visual Studio 2005显示“查询生成器”和“添加表”对话框。 4 选择表Employee,单击“添加”按钮,随后单击“关闭”按钮。Visual Studio 2005把Employee表添加到了“查询生成器”中。 5 13

创建DataAdapter (续) 7.3.1 通过Visual Studio 2005创建DataAdapter 在“查询生成器”的Employee窗格中,选择“* (所有列)” 选项,“查询生成器”生成SQL语句。 6 14

7 创建DataAdapter (续) 单击“确定”按钮,随后在“生成SQL语句”对话框中单击“完成” 按钮。 7.3.1 通过Visual Studio 2005创建DataAdapter 单击“确定”按钮,随后在“生成SQL语句”对话框中单击“完成” 按钮。 7 15

创建DataAdapter (续) 7.3.1 通过Visual Studio 2005创建DataAdapter Visual Studio 2005把SqlDataAdapter和SqlConnection添加至组件托盘上。 8 16

创建DataAdapter (续) 7.3.1 通过Visual Studio 2005创建DataAdapter 在组件托盘上选中sqlDataAdapter1,随后在 “ 属性 ” 窗口中将其重命名为 “ daEmployee ” 。 9 17

创建DataAdapter (续) 7.3.1 通过Visual Studio 2005创建DataAdapter 在组件托盘上选中sqlConnection1, 随后在 “ 属性 ” 窗口中将其重命名为 “ cnAdoEmployee ” 。 10 18

创建DataAdapter的多媒体演示 多媒体演示

手动创建DataAdapter 7.3.2 手动创建DataAdapter 拖曳一个SqlDataAdapter控件到窗体设计器上,Visual Studio 2005启动“数据适配器配置向导”。 1 单击“取消”按钮。Visual Studio 2005将关闭配置向导并在组件托盘上添加一个DataAdapter组件。 2 20

手动创建DataAdapter (续) 7.3.2 手动创建DataAdapter 选中DataAdapter,随后在“属性”窗口中将Name属性直改为“ daDepartment ” 。 3 21

1 2 预览DataAdapter的结果 下面就来学习如何检查DataAdapter的配置情况。 在组件托盘中选中daEmployee。 单击位于控件右上方的小箭头,选择“预览数据”链接项。 2 22

3 预览DataAdapter的结果 (续) Visual Studio 2005将显示从DataAdapter检索而来的数据。 23

预览DataAdapter的结果 (续) 7.3.3 预览DataAdapter的结果 关闭“预览数据”对话框。 4 24

预览DataAdapter的结果的多媒体演示

通过编程方式创建DataAdapter 可以使用下面的语句来创建DataAdapter 。 [C#] SqlDataAdapter dataAdapter = new SqlDataAdapter(testCommand); [VB.NET] Dim dataAdapter As New SqlDataAdapter(testCommand)

通过编程方式创建DataAdapter (续) SqlDataAdapter 构造函数支持四种重载。此时所使用的重载 SqlDataAdapter(testCommand)允许在构造函数中指定带有有效连接的命令。其他三种可用的重载如下 。 SqlDataAdapter():设置SqlDataAdapter的一个空实例 SqlDataAdapter(string commandText, SqlConnection connection):允许指定用于填充DataSet/DataTable的命令(作为字符串)以及填充时将用到的连接 SqlDataAdapter(string commandText, string connectionString):允许将命令和相关连接都作为字符串来指定;

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge() 小结 实验 习题 28

DataAdapter的属性 DataAdapter所提供的主要属性及其描述如下表所示。 7.4 DataAdapter的属性 属性 描述 SelectCommand 在数据源中检索数据的数据命令 InsertCommand 在数据源中插入数据的数据命令 UpdateCommand 在数据源中更新数据的数据命令 DeleteCommand 在数据源中删除数据的数据命令 TableMappings DataTableMapping 对象的集合,决定DataSet中的行与数据源之间的关系 UpdateBatchSize 决定批进程支持,指出在批处理中可执行的命令的数量

DataAdapter的属性 (续) 7.4 DataAdapter的属性 在Visual Studio 2005中可以设置DataAdapter的CommandText属性,其步骤如下所示。 在窗体设计器中,选择名为daDepartment的DataAdapter 。随后在“属性”窗口中,展开 SelectCommand 属性。 1 30

DataAdapter的属性 (续) 7.4 DataAdapter的属性 选择Connection属性,单击其右侧的下拉箭头,展开“现有” 结点,选择sqAdoEmployee。 2 31

3 4 5 DataAdapter的属性 (续) 选择CommandText属性,随后单击其右侧的省略号按钮。 Visual Studio 2005将打开“查询生成器”,并显示“添加表”对话框。 4 选择“部门”表,单击“添加”按钮,随后单击“关闭”按钮。 5 32

6 DataAdapter的属性 (续) 通过在“查询生成器”的“部门”窗格中选择“*(所有列)”来添加表中的所有列。 33

7 DataAdapter的属性 (续) 单击“确定”按钮。Visual Studio 2005即生成了CommandText属性。 34

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 35

使用CommandBuilder对象 在代码中实例化CommandBuilder对象的示例如下。 SqlDataAdapter myDataAdapter = new SqlDataAdapter("SELECT * FROM员工", connectionString); SqlCommandBuilder cmdBldr = new SqlCommandBuilder(myDataAdapter) ; cmdBldr.ConflictOption = ConflictOption.CompareRowVersion; Console.WriteLine("Update Command = "); Console.WriteLine(cmdBldr.GetUpdateCommand().CommandText); [VB.NET] Dim myDataAdapter As SqlDataAdapter = _ New SqlDataAdapter("SELECT * FROM 员工", connectionString) Dim cmdBldr As SqlCommandBuilder = New SqlCommandBuilder(myDataAdapter) cmdBldr.ConflictOption = ConflictOption.CompareRowVersion Console.WriteLine("Update Command = ") Console.WriteLine(cmdBldr.GetUpdateCommand().CommandText) 36

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 37

DataAdapter的方法 7.6 DataAdapter的方法 DataAdapter有两个重要的方法:Fill()和Update() 。前者从数据源把数据加载至DataSet,后者把数据从DataSet传回数据源。 使用DataAdapter的Fill()方法填充DataSet 使用 DataAdapter的Update()方法更新DataSet 38

1 Fill()方法填充DataSet 下面的示例程序演示如何使用DataAdapter的Fill()方法填充DataSet 。 在7.3节示例程序的基础上,首先选中组件托盘上的daEmployee,单击其右上角的小箭头,选择“生成数据集”链接项。 1 39

Fill()方法填充DataSet (续) 7.6.1 使用DataAdapter的 Fill()方法填充DataSet 在弹出的“生成数据集”对话框中,单击“确定”按钮。 2 40

Fill()方法填充DataSet (续) 7.6.1 使用DataAdapter的 Fill()方法填充DataSet 在组件托盘上可以看到所生成的数据集dataSet1数。 3 41

Fill()方法填充DataSet (续) 7.6.1 使用DataAdapter的 Fill()方法填充DataSet 拖曳两个Button控件和一个DataGridView控件到窗体设计器上。 4 42

Fill()方法填充DataSet (续) 7.6.1 使用DataAdapter的 Fill()方法填充DataSet 在btnFill按钮的Button_Click事件中添加如下代码 。 5 dataSet11.员工.Clear(); daEmployee.Fill(dataSet11.员工); dataGridView1.DataSource = dataSet11.员工; 43

Fill()方法填充DataSet (续) 7.6.1 使用DataAdapter的 Fill()方法填充DataSet 按F5键运行应用程序,随后单击“填充”按钮。 6 关闭应用程序。 7 44

Fill()方法填充DataSet的多媒体演示

1 2 Update()方法更新DataSet 下面的示例程序演示如何使用DataAdapter的Update()方法更新DataSet。 在btnUpdate按钮的Button_Click事件中添加如下代码 。 1 daEmployee.Update(dataSet11.员工); 按 F5键运行应用程序 。 2 46

Update()方法 更新DataSet (续) 7.6.2 使用DataAdapter的 Update() 方法更新DataSet 单价“填充”按钮,随后单击第一行的EmployeeName单元格,修改该单元格中的内容,将“王海”改成“王东”。 3 47

4 5 Update()方法 更新DataSet (续) 单击 “ 更新”按钮。 再次单击“填充”按钮来确认数据源已经被更新 。 7.6.2 使用DataAdapter的 Update() 方法更新DataSet 单击 “ 更新”按钮。 4 再次单击“填充”按钮来确认数据源已经被更新 。 5 48

6 Update()方法 更新DataSet (续) 关闭应用程序。 7.6.2 使用DataAdapter的 49

Update()方法更新DataSet的多媒体演示

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 51

更新数据时的状态管理 可能需要决定插入、删除或更新某些行 其他用户可能同时保存其更改,您在DataSet中所保存的查询数据可能已无效 7.7 更新数据时的状态管理 在连接、获取、断开、修改、重新连接和持久保存更改等一系列过程中,可能需要考虑很多事情。 可能需要决定插入、删除或更新某些行 其他用户可能同时保存其更改,您在DataSet中所保存的查询数据可能已无效 为新插入的记录所生成的键值可能不正确 在设法进行更新之后,可能需要将当前数据的刷新版本取回应用程序

更新数据时的 状态管理 (续) DataRowState枚举的各种值及其相应的含义如下表所示。 7.7 更新数据时的状态管理 常量 值 描述 Detached 1 在任何给定时间,一个DataRow最多只能连接到一个 DataTable。如果未连接到任何 DataTable,则该行的状态为脱离 UnChanged 2 此行从数据源获取,并且未进行任何更改 Added 4 此行从数据源获取,并且已添加到DataTable中。在更新期间,DataAdapter将对其执行InsertCommand Deleted 8 此行从数据源获取,然后从DataTable中删除。在更新期间,DataAdapter将对其执行 DeleteCommand Modified 16 此行从数据源获取,并且已经被修改过。在更新期间,数据适配器将对其执行UpdateCommand

更新数据时的 状态管理 (续) 7.7 更新数据时的状态管理 下面通过演示全部五种行状态的练习来体会一下。

1 2 3 更新数据时的 状态管理 (续) 首先创建一个新的控制台应用程序, 并将其命名为“演示7.1”。 7.7 更新数据时的状态管理 首先创建一个新的控制台应用程序, 并将其命名为“演示7.1”。 1 添加一个方法以帮助显示EmployeesTable的行状态。 2 编写填充DataTable并显示行状态的程序代码。 3 55

更新数据时的 状态管理 (续) 7.7 更新数据时的状态管理 编译并运行应用程序。 4 56

5 更新数据时的 状态管理 (续) 将第一行的“王海”更改为“王刚” 删除第二行“刘虹” 第三行“张宇”保持不变 添加第四行“陈东” 7.7 更新数据时的状态管理 接着, 进行以下更改。 5 将第一行的“王海”更改为“王刚” 删除第二行“刘虹” 第三行“张宇”保持不变 添加第四行“陈东” 57

更新数据时的 状态管理 (续) 7.7 更新数据时的状态管理 编译并运行应用程序。 6 58

7 8 9 更新数据时的 状态管理 (续) 现在创建一个与“陈东”行相似的新行,但并不将其添加到employeesTable 中。 7.7 更新数据时的状态管理 现在创建一个与“陈东”行相似的新行,但并不将其添加到employeesTable 中。 7 然后, 检查此新行的行状态。 8 将所做的更改更新到数据库中。 9 59

更新数据时的 状态管理 (续) 7.7 更新数据时的状态管理 对于其余各行,根据所做更改的确切性质,DataRow 的 RowState 将获得相应的值。 10 在编译并运行该应用程序之前,请在本地 SQL Server上设置跟踪。 11 在跟踪运行的情况下,编译并运行应用程序。 12 60

更新数据时的 状态管理 (续) 7.7 更新数据时的状态管理 接下来,使用下面的代码片段来检查更新后的DataTable的最终行状态。 13 [C#] DisplayRowStates("Final Row States:", employeesTable); [VB.NET] DisplayRowStates("Final Row States:", employeesTable) 61

更新数据时的 状态管理 (续) 7.7 更新数据时的状态管理 其输出结果如图所示。 代码示例C# 代码示例VB 62

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 63

用SqlBulkCopy移动大量数据 创建并使用SqlBulkCopy的步骤如下。 此应用程序的目的是演示在两个相同结构的表之间可以相当快地复制数据 由于该应用程序操作的对象是同一个数据库,因此只需要一个连接字符串;但是,需要两个不同的SqlConnection:一个用于SqlBulkCopy将要读取的DataReader,另一个用于 SqlBulkCopy 本身 应用程序的第二部分使用SqlBulkCopy对象实例将从创建的DataReader读取的数据插入员工副本表 操作完成 代码示例C# 代码示例VB 64

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 65

DataTable事件 DataTable公开了一系列可以由应用程序捕获并处理的事件。 7.9 DataTable事件 事件 描述 ColumnChanged 在值被成功插入列时发生 ColumnChanging 在值被提交给列时发生 RowChanged 在成功更改DataRow之后发生 RowChanging 在DataRow正在更改时发生 RowDeleted 在表中的行被删除后发生 RowDeleting 在表中的行被标记为删除时发生 TableClearing 当表正在被清除时发生 TableCleared 当表已被清除时发生 TableNewRow 在表中新增一行后立即发生 66

DataTable事件 (续) DataColumnChangeEventArgs对象所提供三个属性及其描述如下表所示。 ProposedValue 获取或者设置目标值。这就是要赋给列的新值。例如,在ColumnChanging事件处理程序中,可以查看ProposedValue,接受或拒绝该值的变化 Row 获取其值将要改变的DataRow对象 67

DataTable事件 (续) DataRowChangeEventArgs所提供的两个属性及其描述如下表所示。 Action 获取将要或已经在DataRow上发生的动作(例如,添加、修改或删除) Row 获取将要或已经发生动作的DataRow对象 68

DataTable事件 (续) DataTableClearTableEventHandler所提供的三个属性及其描述如下表所示。 获取正在被清除的表 TableName 获取表名 TableNamespace 获取给定表的命名空间。这在XML转换中特别有用 69

DataTable事件 (续) DataTableNewRowEventHandler所提供的一个属性及其描述如下表所示。 获取正在被添加的表 70

DataTable事件 (续) 基于列的:ColumnChanging,ColumnChanged 基于行的:RowChanging,RowChanged,RowDeleting,RowDeleted 基于表的:TableClearing,TableCleared,TableNewRow 71

DataTable事件 (续) 添加并读取行错误提示信息。 接受或拒绝对行所做的更改。 代码示例C# 代码示例VB 72

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge ()方法 小结 实验 习题 73

GetChanges和Merge 使用GetChanges方法的时机 在DataSet中获得更改的示例 将更改合并到DataSet 74

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用Command Builder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges和Merge 小结 实验 习题 75

小结 7.11 小结 本章介绍了创建DataAdapter、预览DataAdapter的结果和DataAdapter类; 掌握了如何使用DataAdapter查询表和填充DataSet; 理解了如何配置DataAdapter、如何使用DataAdapter和DataSet更新数据。 76

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge() 方法 小结 实验 习题 77

实验 7.12 实验 参照实验手册,并在教师的指导下完成实验报告。 78

第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 第7章 在断开连接的环境中编辑和更新数据 DataAdapter简介 .NET Framework中的DataAdapter 类 创建DataAdapter DataAdapter的属性 使用CommandBuilder对象 DataAdapter的方法 更新数据时的状态管理 用SqlBulkCopy移动大量数据 DataTable事件 GetChanges()和Merge()方法 小结 实验 习题 79

习题 1. 多选题: 以下关于DataAdapter对象的描述, ______是正确的。 7.13 习题 1. 多选题: 以下关于DataAdapter对象的描述, ______是正确的。 A. DataAdapter对象可以用来检查查询结果 B. DataAdapter对象可以作为数据库和断开连接对象之间的网桥 C. DataAdapter对象可提取查询结果以便脱机时使用 D. DataAdapter对象可以把脱机使用时所做的更改提交到数据库中 80

习题(续) 2. 多选题: DataSet和DataAdapter之间的区别是______。 A. DataSet在断开连接的缓存中存储数据 7.13 习题 2. 多选题: DataSet和DataAdapter之间的区别是______。 A. DataSet在断开连接的缓存中存储数据 B. DataAdapter对象是DataSet和数据源之间检索或保存数据的桥梁 C. DataSet公开由表、行和列所组成的分层对象模型 D. DataAdapter类表示一组数据库命令以及可用做填充DataSet和更新数据源的数据库连接 81

习题(续) 3. 多选题: 方法_____能更有效地使用DataAdapter填充DataSet。 7.13习题 3. 多选题: 方法_____能更有效地使用DataAdapter填充DataSet。 A. 使用与DataAdapter所传入的数据结构相同的类型化DataSet B. 在填充DataSet之前,调用BeginLoadData()方法 C. 在使用多个有相同连接的DataAdapter填充DataSet之前,显式地打开连接 D. 使用DataAdapter对象的TableMappings集合 82

习题(续) 4. 为了将数据更改持久地保存到数据源,将按______顺序调用各种方法。 (1)调用Update()方法 7.13 习题 4. 为了将数据更改持久地保存到数据源,将按______顺序调用各种方法。 (1)调用Update()方法 (2)调用GetChanges()方法 (3)调用Merge()方法 (4)调用AcceptChanges()方法 A. (1)(2)(3)(4) B. (4)(1)(2)(3) C. (2)(3)(1)(4) D. (1)(3)(4)(2) 83

习题(续) 7.13 习题 5. 准备将记录从一个数据库传输到另一个数据库。 只需确保源数据库是 Microsoft SQL Server,就能使用 SqlBulkCopy 类来传输记录吗? 84

习题(续) 7.13 习题 6. 在DataSet 和 DataTable 对象中,可通过设置SqlDataAdapter 的______________属性来批量传输数据库之间的数据,也可通过_________方法,筛选出 DataTable 或 DataSet 被更改的部分。还可以通过_______方法,指定 DataSet、DataTable 或 DataRow 对象的数组合并为 DataSet。 85