0

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

我的程序:当用户想要插入新行时,我会检查数据集是否存在该行,并且仅在该行不存在时才插入该行。但与此同时(在填充和检查之间),另一个用户将同一行插入数据库。所以我得到了 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;
4

1 回答 1

0

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

于 2013-09-11T13:39:11.200 回答