http://community.csdn.net/Expert/topic/3273/3273102.xml?temp=.6940424

解决方案 »

  1.   

    http://blog.csdn.net/zhpsam109/archive/2004/08/29/87934.aspx
      

  2.   

    where 后面的参数写法参考:Com.Parameters.Add(new OleDbParameter("@p1",System.Data.OleDb.OleDbType.Decimal));
    Com.Parameters[0].SourceColumn="AMOUNTSUM";
    Com.Parameters[0].SourceVersion=DataRowVersion.Original;where前面的参数:
    Com.Parameters.Add(new OleDbParameter("@p",System.Data.OleDb.OleDbType.VarChar));
    Com.Parameters[1].SourceColumn="paymonth";
    Com.Parameters[1].SourceVersion=DataRowVersion.Current;
      

  3.   

    我也曾经遇到这样的问题,祝你早日解决!我的MSN:[email protected]大家一起进步!
      

  4.   

    1.如果你的select 命令中包含Primary Key,那么,你可以使用我在blog中说的填充架构的方法!2.如果你的select不包含Primary Key,那么,你不能使用CommandBuilder来为适配器产生updateCommand等,你可以用我在blog中说的填充架构的方法!另外,你也可以使用为适配器增加表映射的方法! 这个方法可以使你利用从一个适配器(da1)填充的数据集(ds1)利用令一个适配器(da2)的update方法更新到数据源!
      

  5.   

    我没有用CommandBuilder
    就是给UpdateCommand添加SQL来实现得,但是就是出这个问题。
    还有就是我如果把数据库中的ccc这个列删了,然后代码里面做相应修改,就可以正常通过,我真的很迷惑。主键也加了 但是还是不行
      

  6.   

    你要把where 中的那个 (ccc=@ccc_) 拿掉才行。  你想想你将ccc 重新都赋值成 DateTime.Now.ToLongTimeString();   它还会等于原来的值吗?  不等的话, 找不到合适的row, 当然只有更新0条了。  一般来将那个where后面加的都是主键。
      

  7.   

    还有别的用法就是在乐观锁定。 会加一个额外的字段就想你这种用法, 只不过程序要显示的捕捉这个error, 用来表示别人有更新
      

  8.   

    To bruce007(蜀人):
    照你说的我改了,确实通过了。
    但是我加上
    dt.Rows[0]["aaa"] = 1;
    程序还是运行正确。照你说的aaa和ccc一样的啊,在where前面和后面都有,而且都是重新赋值啊。
      

  9.   

    sqlCommandUpdate.Parameters["@ccc_"].SourceVersion = DataRowVersion.Original;
    使用的是original值,但是dt.Rows[0]["ccc"] = DateTime.Now.ToLongTimeString();
    用的是current值,update时会检查datarowversion;
    我认为你应该;
    sqlCommandUpdate.Parameters["@ccc_"].SourceVersion = DataRowVersion.CURRENT;