范荣生(山阻石拦大江毕竟东流去,雪辱霜欺梅花依旧向阳开 !)

Confidence 信心、Competence 能力、Communication沟通、Creation创造、Cooperation合作
QQ:181154335 MSN:fanrsh@hotmail.com

博客园 首页 新随笔 联系 订阅 管理
  129 Posts :: 14 Stories :: 65 Comments :: 1 Trackbacks

我写了一段代码如下:(注:数据库是access)

1:select top 1 * from a where IsPop=false (用户X获取一条IsPop为false的内容);

2:............执行一些其它的操作(时间较长)

3:update a set ispop = true from (select top 1 * from a where IsPop=false )  as b where a.RanID=b.RanID

(把用户X获取的新记录,设置为已被获取)

----------------------------------------------
这段代码在单线程的时候当然是没有问题的。。。。

但如果在多线程下执行。。有可能出现步骤1获取跟步骤3更新记录不一致的情况。。。

----------------------------------------------
解决方案:
Application.Lock()
1:select top 1 * from a where IsPop=false (用户X获取一条IsPop为false的内容);

2:............执行一些其它的操作(时间较长)

3:update a set ispop = true from (select top 1 * from a where IsPop=false )  as b where a.RanID=b.RanID

(把用户X获取的新记录,设置为已被获取)
Application.unlock()
---------------------------------------------------------
不知道这样行不行。。请高手指点。。。。

posted on 2006-05-20 13:58 fanrsh 阅读(305) 评论(2)  编辑 收藏 网摘 所属分类: .NET1.1

Feedback

各位高人.有没有更好的方法提供来参考一下啊....
  回复  引用  查看    

#2楼  2006-05-22 16:40 富康      
怎么能这样呢?
把第一次查询得到的RanID保存到变量中,更新时再传入RanID就可以了
  回复  引用  查看    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-19 15:20 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接: