无法使用getchanges方法获取最近添加的记录

时间:2016-06-20 11:39:31

标签: c# .net datatable ado.net dataadapter

这是我的表:

学生StudentId int PK autoincrement,Name varchar(20)

当我向数据表添加新行并更新它以将其发送到数据库时,它工作正常但我试图获得最近添加的行然后我得到null。

这是我的代码:

 using (var connection = new SqlConnection("MyConnectionstring"))
            {
                connection.Open();
                SqlDataAdapter adapter = new SqlDataAdapter();
                SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

                adapter.SelectCommand = new SqlCommand("select * from Student", connection);


                DataTable dt = new DataTable();
                adapter.Fill(dt);

                DataRow row = dt.NewRow();
                row["Name"] = "Abc";
                dt.Rows.Add(row);
                adapter.Update(dt);
                var addedRecords = dt.GetChanges(DataRowState.Added); //getting null here
                connection.Close();
            }  

但是我添加了学生Abc,但我在这一行中得到了空白:

var addedRecords = dt.GetChanges(DataRowState.Added); //getting null here

4 个答案:

答案 0 :(得分:3)

请参阅this MSDN page for DataAdapter.Update()

  
      
  1. 调用DataRow.AcceptChanges。这将提高两者   更新的DataTable.RowChanging和DataTable.RowChanged事件   的DataRow。
  2.   

Update()正在为您调用AcceptChanges。

如果我们查看the MSDN page for AcceptChanges()

  

调用AcceptChanges时,会隐式调用EndEdit方法   结束任何编辑。如果行的RowState是添加或修改,   RowState变为Unchanged。如果RowState已删除,则为行   被删除了。

这就是为什么GetChanges()来电没有返回任何内容的原因 - 再也没有变化了。

答案 1 :(得分:2)

也许在adapter.Update(dt);之后不再有变化?

答案 2 :(得分:1)

更新datatable后,系统不再有待更改,因此GetChanges会按预期返回null

答案 3 :(得分:1)

加载Datatable后。

你必须说 初始提交的Datatable.AcceptChanges();

然后当您运行GetChanges时,它应该返回新的row插入。

更新GetChanges操作后使用insert