日期:2014-05-18  浏览次数:21019 次

ADO.NET数据库表更新问题,请叫大家,谢谢
开始是连接ACCESS表   ,获得Datatable  
OleAdapter   =   new     OleDbDataAdapter();
OleAdapter.SelectCommand   =   MyCom;
b1_Dataset=   new   DataSet();
OleAdapter.Fill(b1_Dataset,表1);
Datatable   =   b1_Dataset.Tables[0];
//通过查询获得临时tempDataSet  
    SqlAdapter   =   new   SqlDataAdapter(SQLStr,   MyCon);
      tempDataSet   =   new   DataSet();
      SqlAdapter.Fill(tempDataSet);
我可以通过以下方式把tempDataSet中的表一条一条的写入Datatable   中
  for   (int   i   =   0;   i   <   tempDataSet.Tables[0].Rows.Count;   i++)
                        {
                              Row   myRow   =   Datatable.NewRow();
                                for   (int   Columindex   =   0;   Columindex   <   Datatable.Columns.Count;   Columindex++)
                                {
                                        myRow[Columindex]   =   tempDataSet.Tables[0].Rows[i][Columindex];
                                }
                                Datatable.Rows.Add(myRow);
                        }
在更新,可以更新表1,但速度不快!!!!!
      sql   =   new   OleDbCommandBuilder(OleAdapter);
OleAdapter.Update(b1_Dataset,表1);

我想通过(Datatable和tempDataSet.Tables[0]结构一样,合并后
Datatable有数据)   合并数据
Datatable.Merge(tempDataSet.Tables[0],   true);
在用下面方法更新表1不成功
sql   =   new   OleDbCommandBuilder(OleAdapter);
OleAdapter.Update(b1_Dataset,表1);

期待高手指点迷经,谢谢!!

------解决方案--------------------
使用SqlAdapter.Fill的话,所填充的DataTable中的DataRow的RowState都是Unchanged (没有变化),对该DataTable马上进行Update的话,是不会更新数据库的

你的第一个做法是把数据复制后Rows.Add到另外一个DataTable里面去,这些新的DataRow的RowState都是Added,所以在之后Update的话,就添加到服务器端的数据表里去了

但你的第二个做法并没有改变DataRow的RowState,它们还是Unchanged (没有变化),所以更新不起作用,所以我建议对tempDataSet.Tables[0]的的RowState做改动。在2.0下,可以这么做

foreach (DataRow dr in tempDataSet.Tables[0].Rows)
{
dr.SetAdded();
}

然后更新