【问题标题】:Catching and Handling concurrency violations on TableAdapter捕获和处理 TableAdapter 上的并发冲突
【发布时间】:2011-08-16 11:17:08
【问题描述】:

我正在使用TableAdapter 连接到我的数据库表。

当我执行 Update 并且其他人更新了同一行时,我收到并发冲突错误。正如预期的那样。

所以在这一点上,我为用户提供了保存或取消更改的选项

如果他们取消,我可以执行Fill 来获取数据的更新副本,但如果他们想覆盖怎么办?如何实际强制保存数据以覆盖数据库中保存的数据?

【问题讨论】:

    标签: vb.net visual-studio-2010 ado.net concurrency tableadapter


    【解决方案1】:

    如果您使用 SQLCommandBuilder 生成更新语句,则设置 CommandBuilder.ConflictOption=ConflictOption.OverwriteChanges; 然后再次执行 Update()。

    【讨论】:

    • 那么您必须生成自己的 UpdateCommand 才能仅使用 Update SQL 中的主键列。
    【解决方案2】:

    右键单击表格适配器,单击“在数据集设计器中编辑查询”。

    在数据集设计器窗口中,选择 TableAdapter 并转到其属性。

    在属性中,展开更新语句,然后进入 CommandText 属性。在update命令where条件中,去掉所有条件,只保留主键列。例如:

    UPDATE customer
    SET column1 = @column1, column2 = @column2
    WHERE pk_column = @pk_column
    

    现在并发异常不会再出现了,因为这个查询会单独覆盖基于主键的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多