usersTableAdapter usersTA = new usersTableAdapter();
var usersTable = new users.usersDataTable();
usersTA.Fill(usersTable);
VK_BDayParser.users.usersRow row = usersTable.FindByid(currentItem.id);
row.BeginEdit();
row.last_name = "********";
row.EndEdit();
row.AcceptChanges();
usersTable.AcceptChanges();
int result = usersTA.Update(usersTable);
SQL server 2012。
我使用VS 2013中生成的类到数据库
我尝试更新数据库中的行,在“usersRow行”中,此更改有效,但在DB中没有更改。我究竟做错了什么? result
始终为0.
答案 0 :(得分:2)
这是对AcceptChanges方法所做的常见误解
我认为问题源于AcceptChanges
方法文档中的初始评论。
提交自上次以来对此表所做的所有更改 接受了AcceptChanges。
许多人认为这意味着'提交到数据库表',而不是意味着'提交到数据表对象的内存中实例'。
然后,关于文档的以下评论,提示那里真正发生的事情。
调用AcceptChanges时,任何DataRow对象仍处于编辑模式 成功结束编辑。 DataRowState也会更改:全部已添加 和修改的行变为未更改,删除的行将被删除。
因此,有这个DataRow.RowState属性表示属于DataTable的内存中实例的内存中行的当前状态。正是这种状态有助于DataAdapter.Update
方法发现如何处理行。
换句话说,Update方法决定仅为非RowState==DataRowState.Unchanged
的行更新数据库表。但是调用AcceptChanges'提交'这些行并且它们的状态变为Unchanged。没有更新。