数据库绑定中,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,如需转载请自行联系原作者





相关文章
|
2月前
|
数据库 数据安全/隐私保护
winform通过ListView绑定数据库数据源
winform通过ListView绑定数据库数据源
34 0
winform通过ListView绑定数据库数据源
|
2月前
|
SQL 缓存 PHP
PHP技术探究:优化数据库查询效率的实用方法
本文将深入探讨PHP中优化数据库查询效率的实用方法,包括索引优化、SQL语句优化以及缓存机制的应用。通过合理的优化策略和技巧,可以显著提升系统性能,提高用户体验,是PHP开发者不容忽视的重要议题。
|
2月前
|
数据库 OceanBase 索引
在OceanBase数据库中,REPLACE INTO和insert update在效率上可能有所不同
【2月更文挑战第30天】在OceanBase数据库中,REPLACE INTO和insert update在效率上可能有所不同
55 1
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
108 1
|
9天前
|
存储 大数据 测试技术
矢量数据库的性能测试与评估方法
【4月更文挑战第30天】本文探讨了矢量数据库的性能测试与评估方法,强调其在大数据和AI时代的重要性。文中介绍了负载测试、压力测试、容量测试、功能测试和稳定性测试五大评估方法,以及实施步骤,包括确定测试目标、设计用例、准备环境、执行测试和分析结果。这些方法有助于确保数据库的稳定性和高效性,推动技术发展。
|
9天前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
|
9天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结
|
9天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
1月前
|
Java 数据库 数据安全/隐私保护
SpringBoot项目使用jasypt加解密的方法加密数据库密码
SpringBoot项目使用jasypt加解密的方法加密数据库密码
12 0
|
2月前
|
Oracle Java 关系型数据库
java实现遍历树形菜单方法——数据库表的创建
java实现遍历树形菜单方法——数据库表的创建
13 0