资源预览内容
第1页 / 共121页
第2页 / 共121页
第3页 / 共121页
第4页 / 共121页
第5页 / 共121页
第6页 / 共121页
第7页 / 共121页
第8页 / 共121页
第9页 / 共121页
第10页 / 共121页
亲,该文档总共121页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
,第 7 章 更新数据源中的数据,数据库应用系统经常要对数据源的数据进行新增、修改和删除等更新操作,ADO.NET实现数据更新的方法主要有以下三种。,(1)使用数据命令更新数据源中的数据。 (2)使用数据适配器更新数据源中的数据。 (3)使用DataView实现数据更新。,【知 识 技 能 目 标】 (1)掌握使用数据命令更新数据源中的数据的方法。 (2)掌握使用数据控件实现数据更新的方法。,(3)掌握使用SqlCommandBuilder对象自动生成命令方式实现数据更新的方法。 (4)掌握使用手工编写代码方式设置数据适配器的命令属性实现数据更新的方法。,(5)掌握使用合并数据集实现数据更新的方法。 (6)了解使用DataView对象实现数据更新的方法。,【本 章 学 习 导 航】 本章主要探讨如何更新数据源中的数据,涉及的内容较多,难度也较大,读者必须多花工夫掌握更新数据的各种方法。建议分为两个教学单元,第一个教学单元为7.1、7.2.1和7.2.2,第二个教学单元为7.2.3、7.2.4和7.3。,(1)较为完善的数据更新流程如下。 调用DataRow.BeginEdit方法将记录置于编辑模式中。 在用户界面编辑数据。 在DataTable的ColumnChanged事件处理程序中验证数据的正确性。, 如果数据验证正确,调用DataRow.EndEdit方法确认所做的编辑;如果数据验证不正确,则调用DataRow.CancelEdit方法取消所做的编辑。 调用Update方法更新数据源。 调用AcceptChanges或RejectChanges方法来接受或拒绝更改。,(2)执行效率较高的数据更新流程如下。 建立数据连接对象、数据适配器对象、主数据集对象和子数据集对象。 新建、修改或删除数据表中的记录。 调用主数据集对象的GetChanges方法获取主数据集的变化数据,并填入子数据集对象。, 调用主数据集的Update方法更新数据源,且只更新变化的数据。 调用主数据集的Merge方法将子数据集合并到主数据集。 调用主数据集的AcceptChanges方法接受更改,或者调用主数据集的RejectChanges方法来取消更改。,7.1 使用数据命令更新数据源中的数据,通过两个实例说明如何使用数据命令更新数据源中的数据。 【实例7-1】,1设计任务 设计一个窗体,该窗体具有逐条浏览数据记录以及新增、修改与删除数据记录的功能。其运行效果如图7-1所示,功能描述如下。,图7-1 更新数据窗体的运行状态,(1)新增数据记录: 首先单击【新增】按钮,窗体中的各个文本框被清空;然后在文本框中输入新的数据,输入完毕单击【保存】按钮即可保存新输入的数据记录。如果要取消新增的数据记录,则单击【取消】按钮。,(2)修改数据记录: 首先浏览数据记录,找到需要修改的数据记录,然后单击【修改】按钮,窗体中的各个文本框取消只读状态,文本框中所显示的原有数据不会被清空,接着修改文本框中的数据,修改完毕单击【保存】按钮保存所作的数据修改。如果要取消修改,则单击【取消】按钮。,(3)删除数据记录: 首先浏览数据记录,找到要删除的数据记录,然后单击【删除】按钮即可删除该数据记录。注意:数据记录被删除后无法恢复。,2设计过程 (1)新建一个项目Chapter7_1。 (2)在窗体中添加10个Button控件、4个TextBox控件和4个Label控件,窗体及控件的设计外观如图7-2所示。,图7-2 更新数据窗体的设计状态,(3)切换到代码窗口,编写程序代码,实现其功能。 窗体级对象变量的定义如代码7-1-1所示,其中变量isAdd用于保存数据时识别是新增数据还是修改数据。,窗体Load事件过程的程序代码如代码7-1-2所示。 【新增】按钮Click事件过程的程序代码如代码7-1-3所示。 【修改】按钮Click事件过程的程序代码为:isAdd = “update“。,【删除】按钮Click事件过程的程序代码如代码7-1-4所示。 【保存】按钮Click事件过程的程序代码如代码7-1-5所示。 【取消】按钮Click事件过程的程序代码如代码7-1-6所示。,3代码分析 代码分析如表7-1所示。,表7-1 程序代码分析,4知识要点说明 新增、修改或删除数据记录后,由于后台数据表中的数据发生了改变,所以必须重新填充数据集,在重新填充数据集之前先清空原数据集,程序代码为:sqlDs.Clear()。,7.2 使用数据适配器更新数据源中的数据,要使用数据适配器实现数据更新,关键是配置数据适配器的SelectCommand、InsertCommand、UpdateCommand和DeleteCommand属性。 配置这些属性的方法主要有以下几种。,(1)使用数据适配器配置向导自动配置数据适配器的四个属性。 (2)手工编写代码配置好SelectCommand属性,然后使用SqlCommandBuilder对象自动配置数据适配器的其他三个属性。 (3)手工编写代码配置数据适配器的四个属性。,7.2.1 使用数据控件实现数据更新 【实例7-2】 1设计任务 设计任务与实例7-1相同。,2设计过程 (1)新建一个项目Chapter7_2。 (2)窗体及控件的设计外观如图7-2所示。,从工具箱的“数据”控件区拖动一个SqlDataAdapter控件到窗体上,这时会自动启动数据适器配置向导,参考3.2节的方法完成数据适配器配置向导的各步操作,数据适配器配置完成后,窗体的组件区域中会出现SqlConnection对象和SqlDataAdapter对象,分别更改其名称为“conn”和“SqlDa”。,接下来生成数据集,且将数据集名称更改为“SqlDs1”。,(3)切换到代码窗口,编写程序代码,实现其功能。 定义本窗体公有的BindingManagerBase类的对象和isAdd变量,isAdd变量用于识别是新增数据还是修改数据。,实例7-2中的【删除】按钮、【保存】按钮和【取消】按钮的Click事件过程的程序代码与实例7-1不同,分别如代码7-2-1、7-2-2、7-2-3所示,其他按钮的Click事件过程的程序代码与实例7-1相同。,3代码分析 代码分析如表7-2所示。,表7-2 程序代码分析,4知识要点说明 (1)在数据集的数据表中新增记录。 由代码7-2-2可知在数据集的数据表中新增记录一般按以下步骤进行。, 声明一个DataRow类型的变量。 调用数据表的NewRow方法建立一个DataRow对象,并将它赋给DataRow变量。, 将数据值赋给新记录的各个字段,如果已设定字段的DefaultValue属性,对于未赋值的字段,则将默认值赋给对应的字段。 调用记录集合的Add方法将已赋数据值的DataRow对象添加到记录集合中。,(2)在数据集的数据表中编辑记录。 将数据值赋给特定记录的特定字段即可。 (3)在数据集的数据表中删除记录。,要删除数据集的数据表中的记录,可以调用DataRow对象的Delete方法,将该记录标示为删除,其RowState属性被设置为Deleted。如果确定要将其删除,则调用AcceptChanges方法;如果要取消删除,则调用RejectChanges方法。,如果要从数据表中直接移除所指定的数据记录,则调用数据表的Rows集合的Remove方法或者RemoveAt方法。,(4)更新数据集中的记录时暂时停止条件约束。 (5)判断数据集是否包含变更的记录。,调用数据集的HasChanges方法,判断数据集中是否包含变更的记录(包括新增、修改或删除的记录)。如果HasChanges方法返回True,表示数据集包含变更的记录;如果HasChanges方法返回False,表示数据集不包含变更的记录。,(6)提取变更的数据记录。 需要返回只包含已变更的数据记录的新数据集或数据表时,调用数据集或数据表的GetChanges方法。,GetChanges方法有两个重载版本:重载版本之一GetChanges()将返回所有的变更记录;另一个重载版本GetChanges(ByVal rowStates As DataRowState)将返回某一种特定类型的记录,其参数rowStates为DataRowState枚举类型,表示记录的状态值,取值如图7-3所示。,图7-3 DataRowState枚举 类型的取值,(7)将数据集变更写回数据源。 调用数据适配器的Update方法将数据集的变更写回数据源,且返回成功更新的记录数目。,如果更新记录时发生错误,便会抛出异常并且中断执行更新,如果希望在遇到错误时继续更新操作而暂时中止异常,可以在调用Update方法之前,先将数据适配器的ContinueUpdateOnError属性设置为True。,这样在记录更新期间发生错误时就不会抛出异常,记录的更新被忽略,并且将错误置入发生错误的记录的RowError属性中,数据适配器仍会继续更新后续的记录。,(8)提交数据集中的变更。 成功执行数据适配器的Update方法之后,调用数据集的AcceptChanges方法提交变更。,(9)在更新数据时,系统自动判断所要变更的数据是新增、修改还是删除,然后自动执行对应的InsertCommand、UpdateCommand和DeleteCommand命令。,7.2.2 使用SqlCommandBuilder对象自动生成命令方式实现数据更新 【实例7-3】,1设计任务 设计一个窗体,该窗体具有实现浏览数据表中的所有数据记录以及新增、修改与删除数据记录的功能。该窗体的运行效果如图7-4所示,其功能描述如下。,图7-4 包含DataGrid控件的窗体运行状态,(1)新增数据记录: 首先单击【新增】按钮,在DataGrid控件最后添加一条空白记录,然后在空白记录中各个字段的对应位置输入新的数据,输入完毕单击【保存】按钮即可保存新输入的数据记录。如果要取消新增的数据记录,则单击【取消】按钮。,(2)修改数据记录: 首先移动DataGrid控件的滑块,找到需要修改的数据记录,然后单击【修改】按钮,窗体中的DataGrid控件取消只读状态,接着修改对应的数据,修改完毕单击【保存】按钮保存所作的数据修改。如果要取消修改,则单击【取消】按钮。,(3)删除数据记录: 首先移动DataGrid控件的滑块,找到要删除的数据记录,然后单击【删除】按钮即可删除该数据记录。,2设计过程 (1)新建一个项目Chapter7_3。 (2)在窗体中添加6个Button控件和1个DataGrid控件,窗体及控件的设计外观如图7-5所示。 (3)切换到代码窗口,编写程序代码,实现其功能。,图7-5 包含DataGrid控件的窗体设计状态,窗体级对象变量的定义如代码7-2-4所示。 窗体Load事件过程的程序代码如代码7-2-5所示。,【新增】按钮Click事件过程的程序代码如代码7-2-6所示。 【修改】按钮Click事件过程的程序代码为:DataGrid1.ReadOnly = False。,【删除】按钮Click事件过程的程序代码如代码7-2-7所示。 【保存】按钮Click事件过程的程序代码如代码7-2-8所示。,DataGrid控件的CurrentCellChanged事件的程序代码如下:bmData.Position = DataGrid1.CurrentRowIndex,这一行代码使数据表中的记录与DataGrid控件中当前被选定的行同步变化。,3代码分析 代码分析如表7-4所示。,表7-4 程序代码分析,4知识要点说明 使用SqlCommandBuilder对象可以自动生成数据适配器的InsertCommand、UpdateCommand与De
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号