1. select from Oracle into dataset1
2. delete .MDB
3. select from .MDB into dataset2
4. insert dataset1 into dataset2
5. dataset2 update

解决方案 »

  1.   

    啊,这么多,看了半天,终于看明白了不要困惑,是这样的:
    行DataRow有个属性RowState , 这是用来记录这一行的状态
    Adapter去Update的时候会先检查行的状态
    <可能是Added, Deleted, Modified, Unchanged ...>
    Added就应该Insert
    Deleted 就应该Delete
    Modified 才应该Update
    Unchanged就是什么都没改变,不做任何动作数据从数据库Select到DataSet,状态都是Unchanged <因为没有改变它们>
    这时候Update是不会做任何动作的
    <所以不出错,哪怕是结构不一样也不出错,因为一检查是Unchanged就跳过去了>所以, 你添加的数据
    tmpRow = tmpDt.NewRow();    // <----行状态变成Added
    tmpRow["id"] = "20";
    tmpRow["userName"] = "Young";
    tmpRow["userAge"] = "21";
    tmpRow["userDefine"] = "222.000";
    tmpRow["userAddr"] = "aaaaaaaaa";
    tmpRow["RegDate"] = "2002-11-11";是可以送到数据库的 因为tmpRow 的行状态是"新添加"的 Added
    Adapter对它Update时 就调用了Insert 语句
      

  2.   

    layershow(绿叶兄) 说得很详细,终于明白是什么回事了,谢谢~ :)那么如果我要把从Oracle读出来的数据都Update到mdb中,是不是要把每一行数据的RowState设成“Added”呢?有没有批量修改的?呵呵...因为用一个循环太费劲了,谢谢~!
      

  3.   

    嗯,RowState是 只读的 :)
    DataAdapter有个属性AcceptChangesDuringFill
    就是说在Fill是否接受改变,默认是true
    这样Fill的时候, DataRow状态都是Unchanged
    只要把它设置成false就行了
    Fill之后DataRow的状态都是Added  :)
      

  4.   

    me.contextbinding(dataset,"table").Endccurrentedit()
    dataset.acceptchanges()
    spldp.update(dataset)
      

  5.   

    如果你不用这句,得不到最后结果dataset.acceptchanges()