并发冲突问题
问题描述:
T_MemTypeAdvanceBooking表中有这些列:并发冲突问题
CentreID Int PrimaryKey
MembershipType Uniqueindentifier PrimaryKey
FacilityName UniqueIdentifier PrimaryKey
ActivityName NvarChar(35) PrimaryKey
NumOfAdvanceDaysBooking smallint
我知道可能会为拥有这些主键听起来很傻,但在我的应用程序时,我填写的所有按键和我做一个插入,它没问题!但是当我尝试用NumOfAdvancedDaysBooking的不同的值更新行,它抛出ConcurrencyViolation之外,怎么是这样的?对我来说这是什么修复? 这里ISTE更新命令:
Me.SqlUpdateCommand1.CommandText = "UPDATE [T_MemTypeAdvanceBooking] SET [CentreId" & _
"] = @CentreId, [MembershipTypeId] = @MembershipTypeId, [MAIN FACILITY USED] = @M" & _
"AIN_FACILITY_USED, [ActivityType] = @ActivityType, [NumOfAdvanceDays] = @NumOfAd" & _
"vanceDays WHERE (([CentreId] = @Original_CentreId) AND ([MembershipTypeId] = @Or" & _
"iginal_MembershipTypeId) AND" & _
"([ActivityType] = @Original_ActivityType) AND ([RowVer] = @Original_RowVe" & _
"r));"
答
删除RowVer条件:
Me.SqlUpdateCommand1.CommandText = "UPDATE [T_MemTypeAdvanceBooking] SET [CentreId" & _
"] = @CentreId, [MembershipTypeId] = @MembershipTypeId, [MAIN FACILITY USED] = @M" & _
"AIN_FACILITY_USED, [ActivityType] = @ActivityType, [NumOfAdvanceDays] = @NumOfAd" & _
"vanceDays WHERE (([CentreId] = @Original_CentreId) AND ([MembershipTypeId] = @Or" & _
"iginal_MembershipTypeId) AND" & _
"([ActivityType] = @Original_ActivityType));"
说明:
当您在数据表更新的DataRow你实际上得到2行。一个与DataRowVersion当前和另一个与原始。大多数时候您使用当前版本的DataRow。因此,当您发送更新的行时(通常通过DataAdapter)RowVersion不等于原始,但当前。接下来会发生的情况是该条件是错误的,并且数据库中没有记录被更新。 DataAdapter获取没有记录更新的信息,并认为某人更新了您之前的记录并引发了并发异常。
我建议你对你的表型整数列版本添加。当插入您设置版本为1。在每一个后续更新您可以通过1递增版本这样你就可以通过只比较牵强版本值(@Original_Version)与实际版本值([版本])发行时DB更新检查乐观并发声明。
Me.SqlUpdateCommand1.CommandText = "UPDATE [T_MemTypeAdvanceBooking] SET [CentreId" & _
"] = @CentreId, [MembershipTypeId] = @MembershipTypeId, [MAIN FACILITY USED] = @M" & _
"AIN_FACILITY_USED, [ActivityType] = @ActivityType, [NumOfAdvanceDays] = @NumOfAd" & _
"vanceDays WHERE (([CentreId] = @Original_CentreId) AND ([MembershipTypeId] = @Or" & _
"iginal_MembershipTypeId) AND" & _
"([ActivityType] = @Original_ActivityType) AND ([Version] = @Original_Version));"
没有人??????????? – Bahman 2011-04-16 10:40:09
没有看到的不仅仅是表结构更没有什么去。你如何执行更新? – MartW 2011-04-16 10:45:03
数据适配器的课程! – Bahman 2011-04-16 10:55:57