1. select from Oracle into dataset1
2. delete .MDB
3. select from .MDB into dataset2
4. insert dataset1 into dataset2
5. dataset2 update
2. delete .MDB
3. select from .MDB into dataset2
4. insert dataset1 into dataset2
5. dataset2 update
行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 语句
DataAdapter有个属性AcceptChangesDuringFill
就是说在Fill是否接受改变,默认是true
这样Fill的时候, DataRow状态都是Unchanged
只要把它设置成false就行了
Fill之后DataRow的状态都是Added :)
dataset.acceptchanges()
spldp.update(dataset)