当使用CommandBuilder自动生成命令,并使用该命令来更新数据库数据时,CommandBuilder对象会自动根据Select命令来自动生成其它三个命令,但是生成的命令会将所有的列都加到命令中去,所以在更新时如果处理不当,就会引发“并发冲突:update影响0条记录”的类似错误,特别是当你的列值是计算列( 或是在DataTable创建时设置了Expression属性 )时,这种错误更容易引起,一般地,如果数据库中列存储的类型的小数位有限制,则存入数据库的值会自动被四舍五入,这样在下次运行并获取数据时,计算列会重新计算并造成与数据库中的数据不一致,引起无法更新的上述错误。
解决方法有两个:
1。将CommandBuilder换成用正确的命令来组成的Command,就是别用CommandBuilder了。
2。保证进行计算的列的值在计算前都已经正确Round过了,且计算列所需需的列的值在每次都将取一样的值。并将该计算列转变成在程序中保存以前计算。即不让数据库或数据集自动计算。
解决方法有两个:
1。将CommandBuilder换成用正确的命令来组成的Command,就是别用CommandBuilder了。
2。保证进行计算的列的值在计算前都已经正确Round过了,且计算列所需需的列的值在每次都将取一样的值。并将该计算列转变成在程序中保存以前计算。即不让数据库或数据集自动计算。
浙公网安备 33010602011771号