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

vortexroc 2011-04-16 06:06:13
如下代码:
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
目的是首先检索数据库记录的记录标识(日期,类型,名字),如果没有符合的记录则添加一个记录标识,然后更新剩余的列值;如果有符合的记录则直接更新剩余的列值,但是在添加了第一个记录的标识后马上更新剩余列值时就提示:“违反并发性”,请问如何解决?
...全文
203 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeffyuki 2011-04-28
  • 打赏
  • 举报
回复
改写dataset里面每一个datatable的update语句,把where后面的条件大多数去掉,只保留主键=@主键.这样就不会涉及到全表更新了。
colorall 2011-04-18
  • 打赏
  • 举报
回复

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

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧