第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