Datatable不会更新我的数据库

时间:2015-02-15 18:23:11

标签: c# sql-server datatable datarow tableadapter

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.

1 个答案:

答案 0 :(得分:2)

这是对AcceptChanges方法所做的常见误解 我认为问题源于AcceptChanges方法文档中的初始评论。

  

提交自上次以来对此表所做的所有更改   接受了AcceptChanges。

许多人认为这意味着'提交到数据库表',而不是意味着'提交到数据表对象的内存中实例'。

然后,关于文档的以下评论,提示那里真正发生的事情。

  

调用AcceptChanges时,任何DataRow对象仍处于编辑模式   成功结束编辑。 DataRowState也会更改:全部已添加   和修改的行变为未更改,删除的行将被删除。

因此,有这个DataRow.RowState属性表示属于DataTable的内存中实例的内存中行的当前状态。正是这种状态有助于DataAdapter.Update方法发现如何处理行。

换句话说,Update方法决定仅为非RowState==DataRowState.Unchanged的行更新数据库表。但是调用AcceptChanges'提交'这些行并且它们的状态变为Unchanged。没有更新。