C# DataTable.Select() 查询出的数据与实际数据存在不同

Select()使用时的注意事项

如果是从DataGridView.DataSource获取表格数据,获取的数据和最开始赋值时的数据,如果存在着不同。比如说原来第一行第一列的单元格数据是“11”,后面通过代码将值修改成了“22”,如果不加上这样行

dt.AcceptChanges();

直接用dt.Select(),是查不出这一处修改的。但是实际的dt中是存在这个修改过的值“22”.
我想了下,这可能是涉及到提交的问题。select()只会查询最终的完全提交的数据,此时的“22”属于修改但未提交。所以select()查不出来。

直接在DataGridView上操作值,是没有问题的,修改了值就是修改了。

通过代码的方式修改表格数据,每一次修改操作,会自动地提交上一次的修改。什么意思?

我要改了两个数据,第一次修改为“22”,第二次修改为“33”,如果用select()只能查出“22”,但程序里面的dt的值是“33”.
在修改为“33”的时候,自动的将“22”的修改提交了。

总结

1.在程序里以代码的方式修改DataTable后,最好加一句

dt.AcceptChanges();

避免数据不完全修改(未提交)

2.DataTable的操作相当于做了回滚预操作,所以数据要真正修改,要加上一句提交语句,就是上面的一行。而且每做一次修改操作,都会对上一次的修改但是提交的操作做一次提交。这就是为什么,我修改了20行数据,结果只有19行受影响

3.DataTable的select()虽然是对DataTable进行查询,但是本质上是对已经完成提交操作的DataTable进行查询。已修改的数据在DataTable中确实存在,但是没有被提交。相当于DataTable中存在一个旧值和新值,当提交后,旧值删去;没有提交,select只会调用旧值。

希望大家多多交流,可以加我的qq一起探讨:408187750

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值