首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

同时执行插入和更新dataset时出现“违反并发性”,怎么解决

2012-02-17 
同时执行插入和更新dataset时出现“违反并发性”,如何解决?如下代码:For i As Integer 1 To weaTypes.Leng

同时执行插入和更新dataset时出现“违反并发性”,如何解决?
如下代码:
For i As Integer = 1 To weaTypes.Length
  For j As Integer = 1 To names.Length
  For k As Integer = 1 To Tlevs.Length
  '首先添加日期, 名称的空记录
  TmpSql = "forecastdate=#" + nowDate.ToShortDateString + "# and " + "weatherType='" + weaTypes(i - 1) + "' and AreaName='" + names(j - 1) + "'"
  fcDR = basinDS.Tables("yb").NewRow
  If basinDS.Tables("yb").Select(TmpSql).Count = 0 Then

  fcDR(1) = nowDate.ToShortDateString : fcDR(2) = names(j - 1) : fcDR(3) = weaTypes(i - 1)
  basinDS.Tables("yb").Rows.Add(fcDR)
  acsDA.Update(basinDS.Tables("yb"))
  End If
  basinDS.Tables("yb").Select(TmpSql)(0)(k + 3) = "F0"
  acsDA.Update(basinDS.Tables("yb"))  
  Next
  Next
  Next
目的是首先检索数据库记录的记录标识(日期,类型,名字),如果没有符合的记录则添加一个记录标识,然后更新剩余的列值;如果有符合的记录则直接更新剩余的列值,但是在添加了第一个记录的标识后马上更新剩余列值时就提示:“违反并发性”,请问如何解决?


[解决办法]

VB.NET code
For i As Integer = 1 To weaTypes.Length   For j As Integer = 1 To names.Length   For k As Integer = 1 To Tlevs.Length   '首先添加日期, 名称的空记录   TmpSql = "forecastdate=#" + nowDate.ToShortDateString + "# and " + "weatherType='" + weaTypes(i - 1) + "' and AreaName='" + names(j - 1) + "'"      If basinDS.Tables("yb").Select(TmpSql).Count = 0 Then   fcDR = basinDS.Tables("yb").NewRow   fcDR(1) = nowDate.ToShortDateString : fcDR(2) = names(j - 1) : fcDR(3) = weaTypes(i - 1)   basinDS.Tables("yb").Rows.Add(fcDR)   End If   basinDS.Tables("yb").Select(TmpSql)(0)(k + 3) = "F0"   acsDA.Update(basinDS.Tables("yb"))      Next   Next   Next
[解决办法]
改写dataset里面每一个datatable的update语句,把where后面的条件大多数去掉,只保留主键=@主键.这样就不会涉及到全表更新了。

热点排行