none
如何才能只更新变化的列? RRS feed

  • 问题

  • TableAdapter 的 UpdateCommand 如下:

    UPDATE [dt] SET [bh] = @bh, [mc] = @mc, [gg] = @gg, [dw] = @dw  WHERE (([rid] = @Original_rid) AND ([timestamp_column] = @Original_timestamp_column));
    SELECT rid, bh, mc, gg, dw FROM dt WHERE (rid = @rid)

    执行 TableAdapter.Update(DataSet) 时,只要表中某行数据有变化,它就会执行上述命令。在SQL表中,通过 update() 测试,发现各列均被更新,即使其实际值未发生变化也是如此。如[bh]变化,其它各列不变,但[mc]、[gg]、[dw] 的update()结果均为真。这不但使SQL 的update() 函数失去了作用,且各列均发送更新,影响了系统性能。

    如何才能只更新变化的列,其它列不变?请不要告诉我,根据各行各列数据变化,动态生成UpdateCommand。

    在VFP中,远程视图具备此功能,即只发送需要更新的列。


    韩立学
    2011年12月27日 3:09

全部回复

  • 自己手工的编写,只更新改变的部分,这个体力活。
    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。
    2011年12月27日 6:03
  • 自己手工的编写,只更新改变的部分,这个体力活。
    2011 c# mvp China. *George读起来像不像“饺子”?我爱吃饺子,我叫George。


    谢谢回复!

    我说过,请不要告诉我,根据各行各列数据变化,动态生成UpdateCommand。

    实在没办法,那可能是微软的缺陷,请高手帮忙反映一下。


    韩立学

    • 已编辑 大海怪 2011年12月27日 23:07
    2011年12月27日 22:55
  • 你好,我个人觉得这个问题应该这样看:一个表有多列,如果你想让Tabadapter针对每种情况调用相应的update语句的话,一个有5列,其中包含一个主键列,所需要的update语句为C(4,1) + C(4,2) + C(4,3) +C(4,4)=2^4 - 1 = 15条,这样tableadapter在选择调用哪个update语句时是不是更没效率?

    不管怎样,你可以上这提交你的建议或意见:http://connect.microsoft.com/VisualStudio/ 


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年12月28日 4:02
    版主
  • 这个本来就不能用通用方法来做,只能自己动态拼SQL
    http://feiyun0112.cnblogs.com/
    2011年12月28日 9:03
    版主
  • 你好,我个人觉得这个问题应该这样看:一个表有多列,如果你想让Tabadapter针对每种情况调用相应的update语句的话,一个有5列,其中包含一个主键列,所需要的update语句为C(4,1) + C(4,2) + C(4,3) +C(4,4)=2^4 - 1 = 15条,这样tableadapter在选择调用哪个update语句时是不是更没效率?

    不管怎样,你可以上这提交你的建议或意见:http://connect.microsoft.com/VisualStudio/ 


    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.



    是的,你说的很对,不能针对每种情况写语句,而应该是一条语句。

    我提到过,VFP的远程视图具备此功能,它不需要开发者去操心,却能针对每行,只发送变化列的更新,从而SQL数据库能够准确地知道哪行哪列数据有变化。

    我提这个问题,是想探究是否VB有办法做到这一点,若无,那应该是VB的缺陷,因为VFP已经做到了。


    韩立学
    2011年12月28日 9:47
  • 就目前而言,VB.net的确还不能做到,所以你可以去connect上提出你的建议,会有专人负责review你的建议的,欢饮哦~
    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2011年12月28日 9:51
    版主
  • 谢谢回复!可是http://connect.microsoft.com/VisualStudio/ 为什么没有中文页面呢?英文看起来太费劲了!
    韩立学
    2011年12月28日 10:15
  • 目前微软还没推出中文版哎,将就一下~
    Mike Feng
    MSDN Community Support | Feedback to us
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    2011年12月29日 3:59
    版主