代码如下,请各位大哥帮帮忙。
String sql = "select * from BOM_Item";
OleDbConnection oleConn = new OleDbConnection(oleCnnStr);
OleDbDataAdapter oleAdaper = new OleDbDataAdapter();//sql,oleConn);
oleAdaper.SelectCommand = new OleDbCommand(sql, oleConn);OleDbCommandBuilder MyCommandBuild = new OleDbCommandBuilder(oleAdaper);//
oleConn.Open();
DataSet ds = new DataSet();
oleAdaper.Fill(ds);
String tbName = ds.Tables[0].TableName;
String tem = ds.Tables[0].Rows[0]["BOMID"].ToString();
DataRow dr = ds.Tables[0].NewRow();
dr["BOMID"] = "104";
dr["Quantity"] = 10;
ds.Tables[0].Rows.Add(dr);

ds.AcceptChanges();

oleAdaper.Update(ds,ds.Tables[0].TableName);//这里不就是更新数据库吗?

解决方案 »

  1.   

    晕,删掉ds.AcceptChanges();就行了。
    这是为什么呢?
      

  2.   

    oleAdaper.Update :对dataRow 的RowState等于deleted/inserted/updated调用响应的delete等command进行更新
    ds.AcceptChanges():将所有的dataRow的Rowstate更改为unchanged,因此也就没有任何数据更新 :)
      

  3.   

    这个当然了,ds.AcceptChanges();
    AcceptChanges表示数据集接受刚才的修改
    如MSDN中:
    DataRow 和 DataTable 类都具有 AcceptChanges 方法。在 DataTable 级别调用 AcceptChanges,会为要调用的每个 DataRow 导致 AcceptChanges 方法。同样,对 DataSet 调用 AcceptChanges 会导致对 DataSet 中的每个表调用 AcceptChanges。照这样,您可在多个级别上调用该方法。调用 DataSet 的 AcceptChanges 将使您只需调用一次,即可对所有次级对象(例如表和行)调用该方法。当对 DataSet 调用 AcceptChanges 时,任何仍处于编辑模式的 DataRow 对象都将成功结束其编辑。每个 DataRow 的 RowState 属性也会随之更改;状态为 Added 和 Modified 的行的状态将变为 Unchanged,状态为 Deleted 的行则被移除。------------------
    而Update()方法是用于对DataRow的RowState属性为Added 和 Modified 、Deleted 时而更新数据库了,而你调用AcceptChanges方法,把所有的DataRow的RowState属性改为了UnChanged.而当RowState为UnChanged时,OleDbDataAdapter是不会更新数据库的。
      

  4.   

    ds.AcceptChanges():将所有的dataRow的Rowstate更改为unchanged,update就是根据那些状态来选择调用哪个语句,这就是原因。
      

  5.   

    oleAdaper.Update(ds,ds.Tables[0].TableName);//
    ds.AcceptChanges();