我正在使用强类型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;
答案 0 :(得分:0)
问题是TableAdapter不提供数据同步。 我编写了一个存储过程来插入数据并检查存储过程(如果值已经存在)。 我还捕获了一个重复的密钥异常,由于检查和插入操作之间的延迟,仍会发生迁移。