【问题标题】:Datatable won't update my DB数据表不会更新我的数据库
【发布时间】:2015-02-15 18:23:11
【问题描述】:
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 服务器 2012。

我使用从 VS 2013 生成的类到数据库

我尝试更新数据库中的行,在“usersRow 行”中,此更改有效,但在数据库中没有任何更改。我究竟做错了什么? result 始终为 0。

【问题讨论】:

  • 删除 AcceptChanges 调用。两者
  • 还要检查您的连接字符串。您使用的是user instance 和/或AttachDbFileName
  • @Steve thx,它真的有效!

标签: c# sql-server datatable datarow tableadapter


【解决方案1】:

这是对AcceptChanges 方法作用的常见误解。
我认为问题出在AcceptChanges 方法文档中的初始注释。

提交自上次以来对该表所做的所有更改 调用了 AcceptChanges。

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

然后,对文档的以下评论暗示了那里真正发生的事情。

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

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

换句话说,Update 方法决定只为不是RowState==DataRowState.Unchanged 的行更新数据库表。但是调用 AcceptChanges 会“提交”这些行,并且它们的状态变为未更改。那就不更新了。

【讨论】:

    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多