资源描述
在断开连接的环境(hunjng)中编辑和更新数据第一页,共23页。体验(tyn)第二页,共23页。DataAdapter简介(jin ji)在在ADO.NET中,中,DataSet是数据在内存中的表示是数据在内存中的表示(biosh)形式,它提供了独立于数据源的关系形式,它提供了独立于数据源的关系编编程模型。程模型。第三页,共23页。.NET Framework中的DataAdapter 类.NET Framework 2.0包括包括(boku)DataAdapter类类,如下下表所示。如下下表所示。DataAdapter 类类描述描述System.Data.SqlClient.SqlDataAdapterSQL Server.NET Framework数据提供程序数据提供程序DataAdapter类类System.Data.OleDbClient.OleDbDataAdapterOLE DB.NET Framework数据提供程序数据提供程序DataAdapter类类System.Data.Odbc.OdbcDataAdapterODBC.NET Framework数据提供程序数据提供程序DataAdapter类类System.Data.OracleClient.OracleDataAdapterOracle.NET Framework数据提供程序数据提供程序DataAdapter类类第四页,共23页。通过通过Visual Studio 2005创建创建(chungjin)DataAdapter 通过编程方式创建通过编程方式创建(chungjin)DataAdapter 第五页,共23页。通过编程方式(fngsh)创建DataAdapterSqlDataAdapter 构造函数支持四种重载。此时所使用的重载构造函数支持四种重载。此时所使用的重载 SqlDataAdapter(testCommand)允许在构造函数中指定带有有效连接的允许在构造函数中指定带有有效连接的命令。其他三种命令。其他三种(sn zhn)可用的重载如下可用的重载如下。SqlDataAdapter():设置:设置SqlDataAdapter的一个空实例的一个空实例(shl)SqlDataAdapter(string commandText,SqlConnection connection):允许指定用于填充:允许指定用于填充DataSet/DataTable的命的命令(作为字符串)以及填充时将用到的连接令(作为字符串)以及填充时将用到的连接SqlDataAdapter(string commandText,string connectionString):允许将命令和相关连接都作为字符:允许将命令和相关连接都作为字符串来指定;串来指定;第六页,共23页。DataAdapter的属性(shxng)DataAdapter所提供所提供(tgng)的主要属性及其描述如的主要属性及其描述如下表所示。下表所示。属性属性描述描述SelectCommand在数据源中在数据源中检检索数据的数据命令索数据的数据命令InsertCommand在数据源中插入数据的数据命令在数据源中插入数据的数据命令UpdateCommand在数据源中更新数据的数据命令在数据源中更新数据的数据命令DeleteCommand在数据源中在数据源中删删除数据的数据命令除数据的数据命令TableMappingsDataTableMapping 对对象的集合,决定象的集合,决定DataSet中的行与数据源之中的行与数据源之间间的关系的关系UpdateBatchSize决定批决定批进进程支持,指出在批程支持,指出在批处处理中可理中可执执行的命令的数量行的命令的数量第七页,共23页。DataAdapter的方法(fngf)使用使用(shyng)DataAdapter的的Fill()方法填充方法填充DataSetDataAdapter有两个重要有两个重要(zhngyo)的方法:的方法:Fill()和和Update()。前者从数据源把数据加载至。前者从数据源把数据加载至DataSet,后,后者把数据从者把数据从DataSet传回数据源。传回数据源。使用使用 DataAdapter的的Update()方法方法更新更新DataSet第八页,共23页。更新数据时的状态(zhungti)管理 在连接、获取、断开、修改、重新连接和持久保存更改等在连接、获取、断开、修改、重新连接和持久保存更改等一系列过程中,可能一系列过程中,可能(knng)需要考虑很多事情。需要考虑很多事情。可能需要决定插入、删除或更新可能需要决定插入、删除或更新(gngxn)某些某些行行其他用户可能同时保存其更改,您在其他用户可能同时保存其更改,您在DataSet中所中所保存的查询数据可能已无效保存的查询数据可能已无效 为新插入的记录所生成的键值可能不正确为新插入的记录所生成的键值可能不正确 在设法进行更新在设法进行更新(gngxn)之后,可能需要将当之后,可能需要将当前数据的刷新版本取回应用程序前数据的刷新版本取回应用程序第九页,共23页。更新(gngxn)数据时的状态管理DataRowState枚举枚举(mi j)的各种值及其相应的的各种值及其相应的含义如下表所示。含义如下表所示。常量常量值描述描述Detached1在任何给定时间,一个在任何给定时间,一个DataRow最多只能连接到最多只能连接到一个一个 DataTable。如果未连接到任何。如果未连接到任何 DataTable,则该行的状态为脱离则该行的状态为脱离UnChanged2此行从数据源获取,并且未进行任何更改此行从数据源获取,并且未进行任何更改Added4此行从数据源获取,并且已添加到此行从数据源获取,并且已添加到DataTable中。中。在在更新更新期间,期间,DataAdapter将对其执行将对其执行InsertCommandDeleted8此行从数据源此行从数据源获获取,然后从取,然后从DataTable中中删删除。在除。在更新期更新期间间,DataAdapter将将对对其其执执行行 DeleteCommandModified16此行从数据源获取,并且已经被修改过。在此行从数据源获取,并且已经被修改过。在更新更新期期间,数据适配器将对其执行间,数据适配器将对其执行UpdateCommand第十页,共23页。创建并使用创建并使用SqlBulkCopy的步骤的步骤(bzhu)如下。如下。用用SqlBulkCopy移动大量移动大量(dling)数据数据 首先添加一个新的控制台应用程序,并将其命名为首先添加一个新的控制台应用程序,并将其命名为SqlBulkCopy。第三行。第三行“张宇张宇”保持不变保持不变此应用程序的目的是演示在两个相同结构的表之间可以相当快此应用程序的目的是演示在两个相同结构的表之间可以相当快地复制数据地复制数据由于该应用程序操作的对象是同一个数据库,因此只需要一个由于该应用程序操作的对象是同一个数据库,因此只需要一个连接字符串;但是,需要两个不同的连接字符串;但是,需要两个不同的SqlConnection:一个用于:一个用于SqlBulkCopy将要读取的将要读取的DataReader,另一个用于,另一个用于 SqlBulkCopy 本本身身 应用程序的第二部分使用应用程序的第二部分使用(shyng)SqlBulkCopy对象实例将从对象实例将从创建的创建的DataReader读取的数据插入员工副本表读取的数据插入员工副本表操作完成操作完成代码示例代码示例C#代码示例代码示例VB第十一页,共23页。SqlDataAdapter(string commandText,SqlConnection connection):允许指定用于填充DataSet/DataTable的命令(作为字符串)以及填充时将用到的连接RowChanging应用程序的第二部分使用(shyng)SqlBulkCopy对象实例将从创建的DataReader读取的数据插入员工副本表获取将要或已经在DataRow上发生的动作(例如,添加、修改或删除)习题(xt)(续)DataTable事件(shjin)(续)在任何给定时间,一个DataRow最多只能连接到一个 DataTable。SqlDataAdapter(string commandText,string connectionString):允许将命令和相关连接都作为字符串来指定;使用DataAdapter对象的TableMappings集合在数据源中删除数据的数据命令在表中的行被删除后发生在数据源中检索数据的数据命令ProposedValue在数据源中插入数据的数据命令DataTableMapping 对象的集合,决定DataSet中的行与数据源之间的关系TableCleared但是,需要两个不同的SqlConnection:一个用于SqlBulkCopy将要读取的DataReader,另一个用于 SqlBulkCopy 本身DataTable公开了一系列可以由应用程序捕获公开了一系列可以由应用程序捕获(bhu)并处理的事件。并处理的事件。DataTable事件事件(shjin)事件事件描述描述ColumnChanged在值被成功插入列时发生在值被成功插入列时发生ColumnChanging在值被提交给列时发生在值被提交给列时发生RowChanged在成功更改在成功更改DataRow之后之后发生发生RowChanging在在DataRow正在更改时发生正在更改时发生RowDeleted在表中的行被删除后发生在表中的行被删除后发生RowDeleting在表中的行被标记为删除时发生在表中的行被标记为删除时发生TableClearing当表正在被清除时发生当表正在被清除时发生TableCleared当表已被清除时发生当表已被清除时发生TableNewRow在表中新增一行后立即发生在表中新增一行后立即发生第十二页,共23页。DataColumnChangeEventArgs对象所提供对象所提供(tgng)三个三个属性及其描述如下表所示。属性及其描述如下表所示。DataTable事件事件(shjin)(续)(续)属性属性描述描述Column获取其值将要改变的获取其值将要改变的DataColumn对象对象ProposedValue获取或者设置目标值。这就是要赋获取或者设置目标值。这就是要赋给列的新值。例如,在给列的新值。例如,在ColumnChanging事件处理程序中,事件处理程序中,可以查看可以查看ProposedValue,接受或,接受或拒绝该值的变化拒绝该值的变化Row获取其值将要改变的获取其值将要改变的DataRow对象对象第十三页,共23页。DataRowChangeEventArgs所提供所提供(tgng)的两个属性及其的两个属性及其描述如下表所示。描述如下表所示。DataTable事件事件(shjin)(续)(续)属性属性描述描述Action获取将要或已经在获取将要或已经在DataRow上上发生的动作(例如,添加、修改发生的动作(例如,添加、修改或删除)或删除)Row获取将要或已经发生动作的获取将要或已经发生动作的DataRow对象对象第十四页,共23页。DataTableClearTableEventHandler所提供所提供(tgng)的三个的三个属性及其描述如下表所示。属性及其描述如下表所示。DataTable事件事件(shjin)(续)(续)属性属性描述描述Table获取正在被清除的表获取正在被清除的表TableName获取表名获取表名TableNamespace获取给定表的命名空间。这在获取给定表的命名空间。这在XML转换中特别有用转换中特别有用第十五页,共23页。如前所述,如前所述,DataTable事件可以分成以下事件可以分成以下(yxi)三大类别。三大类别。基于基于(jy)列的:列的:ColumnChanging,ColumnChanged基于基于(jy)行的:行的:RowChanging,RowChanged,RowDeleting,RowDeleted基于基于(jy)表的:表的:TableClearing,TableCleared,TableNewRowDataTable事件事件(shjin)(续)(续)第十六页,共23页。使用使用(shyng)GetChanges方法的时机方法的时机GetChanges和和Merge 在在DataSet中获得更改中获得更改(gnggi)的示例的示例将更改将更改(gnggi)合并到合并到DataSet第十七页,共23页。习题(xt)1.多选题多选题:以下关于以下关于DataAdapter对象的对象的描述描述,_是正确的。是正确的。A.DataAdapter对象可以用来检查查询对象可以用来检查查询(chxn)结果结果B.DataAdapter对象可以作为数据库和对象可以作为数据库和断开连接对象之间的网桥断开连接对象之间的网桥C.DataAdapter对象可提取查询对象可提取查询(chxn)结果以便脱机时使用结果以便脱机时使用D.DataAdapter对象可以把脱机使用时对象可以把脱机使用时所做的更改提交到数据库中所做的更改提交到数据库中第十八页,共23页。习题(xt)(续)2.多选题多选题:DataSet和和DataAdapter之间的区之间的区别是别是_。A.DataSet在断开连接的缓存中存储在断开连接的缓存中存储(cn ch)数据数据B.DataAdapter对象是对象是DataSet和数据源之间和数据源之间检索或保存数据的桥梁检索或保存数据的桥梁C.DataSet公开由表、行和列所组成的分层公开由表、行和列所组成的分层对象模型对象模型D.DataAdapter类表示一组数据库命令以及类表示一组数据库命令以及可用做填充可用做填充DataSet和更新数据源的数据库和更新数据源的数据库连接连接第十九页,共23页。在使用多个有相同连接(linji)的DataAdapter填充DataSet之前,显式地打开连接(linji)此时所使用的重载 SqlDataAdapter(testCommand)允许在构造函数中指定带有有效连接的命令。DataTable事件(shjin)(续)TableNamespaceDataTableMapping 对象的集合,决定DataSet中的行与数据源之间的关系多选题:DataSet和DataAdapter之间的区别是_。习题(xt)(续)TableCleared使用(shyng)GetChanges方法的时机SelectCommand在填充DataSet之前,调用BeginLoadData()方法在数据源中删除数据的数据命令NET Framework数据提供程序DataAdapter类使用DataAdapter对象的TableMappings集合获取将要或已经发生动作的DataRow对象习题(xt)(续)3.多选题多选题:方法方法_能更有效地使用能更有效地使用DataAdapter填充填充DataSet。A.使用与使用与DataAdapter所传入的数据结构相同所传入的数据结构相同的类型化的类型化DataSetB.在填充在填充DataSet之前,调用之前,调用BeginLoadData()方法方法C.在使用多个有相同连接在使用多个有相同连接(linji)的的DataAdapter填充填充DataSet之前,显式地打开连之前,显式地打开连接接(linji)D.使用使用DataAdapter对象的对象的TableMappings集合集合第二十页,共23页。习题(xt)(续)4.为了将数据更改持久地保存为了将数据更改持久地保存(bocn)到到数据源,将按数据源,将按_顺序调用各种方法。顺序调用各种方法。(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)第二十一页,共23页。习题(xt)(续)5.准备准备(zhnbi)将记录从一个数据库传输将记录从一个数据库传输到另一个数据库。到另一个数据库。只需确保源数据库是只需确保源数据库是 Microsoft SQL Server,就能使用,就能使用 SqlBulkCopy 类来传输记录吗?类来传输记录吗?第二十二页,共23页。习题(xt)(续)6.在在DataSet 和和 DataTable 对象中,可通过对象中,可通过设置设置SqlDataAdapter 的的_属性属性来批量来批量(p lin)传输数据库之间的数据,传输数据库之间的数据,也可通过也可通过_方法,筛选出方法,筛选出 DataTable 或或 DataSet 被更改的部分。还可被更改的部分。还可以通过以通过_方法,指定方法,指定 DataSet、DataTable 或或 DataRow 对象的数组合并为对象的数组合并为 DataSet。第二十三页,共23页。
展开阅读全文