【问题标题】:database changed outside of DataSet: duplicate key exception数据库在 DataSet 之外更改:重复键异常
【发布时间】:2013-08-11 01:54:48
【问题描述】:

我正在使用强类型数据集,并在程序开始时填写数据集的所有表。我有一张可以由多个用户更改的表。有时会发生此表在数据集之外发生更改,因此用户没有最新版本的表,并在尝试插入同一行时获得异常。

我的程序: 当用户想要插入新行时,我会检查数据集是否存在该行,并且仅在该行不存在时才插入该行。但与此同时(在填充和检查之间),另一个用户将同一行插入数据库。所以我得到了 SQLException: Violation of PRIMARY KEY 约束(错误 2627)。 我怎样才能避免这种情况?

这就是我检查该行是否已经是数据库的一部分的方式:

customersTableAdapter custAdapter = new customersTableAdapter();
AzureDataSet.customersRow custRow= azureDataSet.customers.FindBycustID(hash); 
if(custRow==null)
{    
    try
    {      
        custRow= azureDataSet.customers.NewcustomersRow();
        custRow.custID = hash;

        azureDataSetcustomers.AddcustomersRow(custRow);               
        retryPolicy.ExecuteAction(() =>
        {
            customersTableAdapter.Update(azureDataSet.customers);
        });
    }
    catch
    {
       //check for error 2627??
    }
}
return custRow.custID;

【问题讨论】:

    标签: database exception dataset sql-update dataadapter


    【解决方案1】:

    问题在于 TableAdapter 不提供数据同步。 我编写了一个存储过程来插入数据,如果值已经存在,则检查存储过程。 我还发现了一个重复键异常,由于检查和插入操作之间的延迟,该异常仍然可能发生。

    【讨论】:

      猜你喜欢
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2012-12-16
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多