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();
}
然后更新