OleDbConnection myConn = new OleDbConnection(myConnection);
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
    myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn);
    OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);    myConn.Open();    DataSet custDS = new DataSet();
    myDataAdapter.Fill(custDS);    //code to modify data in dataset here    myDataAdapter.Update(custDS, myTableName);    myConn.Close();    return custDS;

解决方案 »

  1.   

    AcceptChanges必须在你update数据库以后调用,否则,呵呵
      

  2.   

    提交后原有的DataSet是否已改变,如何比较是否改变??还有,因为分三层体系,数据的操作都在数据访问层,如何响应myDataAdapter.Update(custDS, myTableName);
      

  3.   

    你用Update 就不需要 AcceptChange了不知道你那3层是怎么写的, 我的在最外层就用 逻辑对象.Update(DataSet ds)了 ,
      

  4.   

    交后原有的DataSet是否已改变,如何比较是否改变??
    DataSet.HasChanges()  返回bool型
      

  5.   

    一言难尽!
    简言之:
    获取数据:可以使用dataadapter.fill方法,可以用 datareader
    修改数据可以用command.execnoquery方法,也可以用dataadapter.update方法.net中的dataset是内存表,所有的操作都是在内存中进行的,只是在每一个数据行上都有标志表明是增加的、修改过的、删除的。如果用dataadapter.update方法的话需要提供对就的进行增加的command、进行修改的command、进行删除的command,而且在update之前不能对dataset进行acceptchange的操作,因为这么做之后所有数据行的状态都消失了(被标志删除的行将从数据集中移除),成为一个原始数据状态,就好比刚刚fill进来的那样。而dataadapter.update之后,所有增加、修改的数据行的状态将清空,而删除的行将从数据集中移除。