我正在开发一个应用程序,其中我有一个数据集(它代表一个访问数据库),其中有几个数据表。然后我有线程同时在各种数据表中插入/编辑/删除行。
有时我有一个线程将数据表更改提交到数据库(在每个数据表上调用更新方法)。我的问题是数据表有一些被违反的关系。让我举个例子,我在将更改提交到数据库的线程中有这个:
If DS.Tables.Contains("TableA") Then SyncLock DS.Tables("TableA") : TableADataAdapter.Update(DS.Tables("TableA")) : End SyncLock
If DS.Tables.Contains("TableB") Then SyncLock DS.Tables("TableB") : TableBDataAdapter.Update(DS.Tables("TableB")) : End SyncLock
TableA 是 TableB 的父级,因此有一个 ID 列,TableB 中的每条记录都必须在 TableA 中具有相应的值
有时在 TableA 更新后,线程会在 TableA 和 TableB 中插入一条记录,当我更新 TableB 时,TableA 中缺少父记录并且关系中断(引发异常)
我试图锁定 DataSet 以查看 DataSet 中的所有 DataTables 是否都会成为锁定对象,但异常仍然存在。
SyncLock DS: Do The Updates : End SyncLock
我的问题是:有什么方法可以同时锁定所有数据表,以便我可以安全地更新数据库?
感谢您的任何建议