在C#中我有一个DataSet。我调用Fill从数据源(Oracle数据库)加载行。当我修改某些行并调用Update时,如果在填充后数据库中的数据发生了变化,我有时会遇到并发冲突。这些异常由我附加到OracleDataAdapter的“RowUpdated”事件处理程序捕获。
我想用我的数据系统地覆盖数据源中的数据。换句话说,我想实现“最后保存的胜利”。我该如何实现呢?我相信,对于我想要保存的修改后的行,现在是错误的(即Status = ErrorsOccured),我必须找到一种方法,用数据库中的数据刷新行的原始版本,同时保留值当前版本。事实上,如果我的行的原始版本与数据库中的内容之间存在匹配,则对Update的调用才会成功。奇怪的是,我发现没有功能可以实现这一点..谢谢
答案 0 :(得分:0)
阅读"使用ADO.NET的最佳实践" (https://msdn.microsoft.com/en-us/library/ms971481.aspx)我发现我可以使用DataTable Merge:
如果要使用服务器中的当前值刷新表,同时保留对表中行的任何更改,则必须首先使用DataAdapter.Fill填充它,填充新的DataTable,然后合并将DataTable导入DataSet,其preserveChanges值为true。