在我的应用程序中,我有一个向用户显示数据库表内容的控件。此控件保存要在System.Data.DataSet
对象中显示的数据。用户可以修改控件中显示的数据,然后在用户完成后将这些数据提交回数据库。
当用户在控件中进行编辑时,当数据库表中的数据被某些外部进程修改(例如,某些行已被更新)时,就会出现问题。暂时忽略数据正确性的问题,我想做的是提交用户在控件中所做的更改并覆盖此外部进程所做的更改。
我正在使用 aSqlDataAdapter
来更新数据库。在所描述的用例中,当底层数据库表未被外部进程修改时,SqlDataAdapter.Update
将按预期工作。但是,在某些外部进程在用户编辑表时摆弄表的情况下,SqlDataAdapter.Update
不会引发异常,而是返回 0 表示没有更新任何行。我已经检查了我的数据集中的行是否具有正确的数据和RowState
(即DataRowState.Modified
)所以我知道我传递给该SqlDataAdapter.Update
方法的数据是正确的。
我想我的问题有两个部分。
- 为什么
SqlDataAdapter.Update
不使用指定的数据集更新数据库? - 为什么它会默默地失败?
我已阅读此博客条目,并且我的代码在任何地方都没有调用AcceptChanges
,并且正如我上面所说的,我已经检查了DataSet
's RowState
,所以我知道这些行被正确标记为具有修改的数据。