数据库绑定中,DataAdapter的UpDate()方法的一点注意

简介:
在用DataAdapter获得数据,填充到DataTable中后,再把DataGridView绑定到DataTable中后,我们可以在DataGridView进行增删改,然后可以调用DataAdapter的UpData(DataTable),来提交DataGridView中的更改。这个过程表面看来很自然,然后背后都有些什么东西呢?我们来看一下。
   首先,DataGridView绑定到DataTable后,DataTable中的数据就和DataGridView中显示的数据成为一体,即DataGridView中变化,DataTable中也发生变化,随后调用UpData(DataTable),来完成了对DataTable中的更改数据向数据库提交,当然,如果DataAdapter的 DeleteCommand,UpateCommand,InsertCommand没有语句的话,当然需要SqlCommandBuilder来自动生成语句来完成相应的对数据库的提交了。这些都很正常,其实换个控件来绑定一下,真正的问题就会显露出来,就是把一个简单控件绑定到DataTable上时的问题。

   接下来我们通过  textBox1.DataBindings.Add("Text", DT,"学生编号"),这时如果更改textBox1的Text值,调用DataAdapter的UpData(DataTable),会发现数据库中的数据不发生改变,为什么呢?其实,DataAdapter的UpData(DataTable)方法在提交时会找DataTabel中有所改变的数据进行提交,当textBox1的数据库更改后,虽然DataTable中的数据也修改了,但DataTable中的所谓的标志没有改变,也就是当调用DataAdapter的UpData(DataTable)的方法时,不以为DataTable中有更改的数据,所以提交后,数据库中的数据不改变。这时,我们就想,DataTable中的数据明明改了呀,为什么那个所谓的标志没改呢?这里就是想,DataTable中的数据修改后,什么时间所谓本行更改标志才会变呢?经测试发现,只要把编辑的焦点移离本行数据就会触发修改本行的更改标志,这个标志可以通过调用本行的RowState来查看,查看本行是什么状态,没有修改的行是Unchanged这个关态,当然还有一些修改的状态,当然是与增删改有关的。现在的问题是,我们通过什么方法来修改这个状态呢,行的RowState是只读的,没法改变,现在办法就是当点击提交时,先移动行的焦点,再调用DataAdapter的UpData(DataTable)方法,可以通过 textBox1.BindingContext[DT].Position++来移动编辑焦点,这样就达到了更改本行状态的目的了,现在提交,数据库就可以修改了。























本文转自桂素伟51CTO博客,原文链接:   http://blog.51cto.com/axzxs/150001,如需转载请自行联系原作者





相关文章
|
28天前
|
数据库 数据安全/隐私保护
winform通过ListView绑定数据库数据源
winform通过ListView绑定数据库数据源
27 0
winform通过ListView绑定数据库数据源
|
28天前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
1月前
|
存储 缓存 NoSQL
利用Redis List实现数据库分页快速查询的有效方法
利用Redis List实现数据库分页快速查询的有效方法
|
29天前
|
数据库 OceanBase 索引
在OceanBase数据库中,REPLACE INTO和insert update在效率上可能有所不同
【2月更文挑战第30天】在OceanBase数据库中,REPLACE INTO和insert update在效率上可能有所不同
41 1
|
3月前
|
设计模式 NoSQL Java
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
99 1
|
29天前
|
Oracle Java 关系型数据库
java实现遍历树形菜单方法——数据库表的创建
java实现遍历树形菜单方法——数据库表的创建
11 0
|
1月前
|
SQL 关系型数据库 数据库连接
描述一下在 Python 中使用数据库的常见方法。
【2月更文挑战第26天】【2月更文挑战第91篇】描述一下在 Python 中使用数据库的常见方法。
|
3月前
|
SQL 关系型数据库 MySQL
数据库查询——索引优化查询方法
数据库查询——索引优化查询方法
33 0
|
4月前
|
NoSQL Java Redis
Redis【应用 01】Java实现动态切换写入不同Redis数据库的方法实例(动态切换Redis数据库)
Redis【应用 01】Java实现动态切换写入不同Redis数据库的方法实例(动态切换Redis数据库)
80 0