本人刚开始学习C#,在操作SQL数据库过程中遇到问题:
因SQL数据库没有主键,在SqlDataAdapter.UpdateCommand更新时出错。原因可能是更新语句没有设置。请教手动要如何写更新语句呢?
该SQL数据库是专用软件自动生成、自动调用的,数据量大。不能改动,无法生成或设置主键。
ValueID [TimeStamp]       MS  RealValue        Quality Flags  
18      2011-1-30 8:50:00 234 1151.04162597656 128     8392768
19      2011-1-30 8:50:00 234 43.3449058532715 128     8392768
20      2011-1-30 8:50:00 234 .289351850748062 128     8392768
21      2011-1-30 8:50:00 234 .402777761220932 128     8392768
18      2011-1-30 9:30:00 234 1145.83337402344 128     8392704
19      2011-1-30 9:30:00 234 49.6527786254883 128     8392704
20      2011-1-30 9:30:00 234 .289351850748062 128     8392704
21      2011-1-30 9:30:00 234 .385416686534882 128     8392704
18      2011-1-30 9:40:00 234 1124.56591796875 128     8392704
19      2011-1-30 9:40:00 234 49.1898155212402 128     8392704
20      2011-1-30 9:40:00 234 .289351850748062 128     8392704
21      2011-1-30 9:40:00 234 .381944477558136 128     8392704
我想把ValueID==18的所有记录的RealValue值,修改成:用(ValueID==21)的RealValue与(ValueID==20)的RealValue的差。
数据的运算基本解决了。最后的数据库更新由于不能自动生成dataAdapter.UPdate的更新语句,无法执行。
请问各路大虾,要如何写才能更新语句呀?我是新手,麻烦写的具体些呀。要不然我看不明白,先谢谢了!恳求各位出手相助呀。好不容易有了积分发个贴。

解决方案 »

  1.   

    对你好失望哦~~1.表为什么不设主键?
    2.即使不设逐渐也是可以更新的,SqlDataAdapter有其限制.不设主键不可以更新.
    你可以自己手动写T-SQL 用SqlCommand去更新.
      

  2.   

    不设置主键,update就要遍历全表要设置主键,别拿主键不当回事!!!!!!
      

  3.   

    好歹也给个索引,用SqlCommand去执行Update
      

  4.   

    是更新所有valueid==19的记录。更新的结果是所有在相同时间段内,valueid==21的数据与valueid==20的差。
      

  5.   

    这没办法用adapter.update(..)来更新,它的更新是以记录为单位的。
    自己写sql语句,用SelectCommand.ExcuteNonQuery 一行一行更新吧. 
    一个sql 语句应该能解决,这个我不太熟,你再问问别人吧,实在不行去数据库区去问问sql 语句应该是什么样子的。
      

  6.   

    如果可能的话你就添个自增字段,这样你就能用adpter.update了,计算也就方便了,更新起来速度还快