我正在使用强类型数据集,并在程序开始时填写数据集的所有表。我有一张可以由多个用户更改的表。有时会发生此表在数据集之外发生更改,因此用户没有最新版本的表,并在尝试插入同一行时收到异常。
我的程序:当用户想要插入新行时,我会检查数据集是否存在该行,并且仅在该行不存在时才插入该行。但与此同时(在填充和检查之间),另一个用户将同一行插入数据库。所以我得到了 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;