这是我的表:
学生: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
答案 0 :(得分:3)
请参阅this MSDN page for DataAdapter.Update():
- 调用DataRow.AcceptChanges。这将提高两者 更新的DataTable.RowChanging和DataTable.RowChanged事件 的DataRow。
醇>
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
。