数据库在DataSet之外更改:重复键异常

时间:2013-08-09 06:55:00

标签: database exception dataset sql-update dataadapter

我正在使用强类型DataSet,并在程序开头填充DataSet的所有表。我有一个表可以被多个用户更改。有时会发生这个表在dataSet之外更改,因此用户没有表的最新版本,并在尝试插入同一行时获得Exception。

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

1 个答案:

答案 0 :(得分:0)

问题是TableAdapter不提供数据同步。 我编写了一个存储过程来插入数据并检查存储过程(如果值已经存在)。 我还捕获了一个重复的密钥异常,由于检查和插入操作之间的延迟,仍会发生迁移。