一段代码同时只能一个人执行

lvfeng19806001 2011-10-12 04:51:22
代码流程:

清除报表数据库数据(报表有关的表很多)--->通过复杂的逻辑运算插入数据库报表数据--->查询报表数据库并给Excel填入数据

现在要求这个过程同时只能一个人执行,否则后面查询的数据就会不对!

bs程序

这个应该怎么弄?谢谢大家
...全文
1335 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanziquantao 2011-10-18
  • 打赏
  • 举报
回复
你是担心数据混杂呢还是性能问题?还是担心A处理的数据被B查询到,是不是这个意思?

如果是后一种,你给每次处理的数据加上一个唯一ID,比如sessionid,每个人都只对自己的Sessionid下的数据做处理就可以了。
带着爱远行 2011-10-18
  • 打赏
  • 举报
回复
楼主应该是担心这个业务流程时间消耗太多,怕同一时间其他用户也进行这一操作出问题吧,那么用锁就可以解决。如果我没理解错楼主的意思的话,应该就是并发问题
zhoutiea 2011-10-17
  • 打赏
  • 举报
回复
鄙视38楼~~
zhoutiea 2011-10-17
  • 打赏
  • 举报
回复
方法很重要,实现不重要,想实现一个功能,很好实现,就看你用什么样方法,同样一个功能的sql,两个人写出查询时间是不一样的~~~!!!
samyou 2011-10-17
  • 打赏
  • 举报
回复
重组一下业务流程,应该可以有优化。再谈设计和实现
hxa123456 2011-10-17
  • 打赏
  • 举报
回复
这个问题的本质就是并发问题,怎么处理并发,单例模式可以,lock可以。至于状态改0 、1,这个在用户数量少的情况下也可以,但是在并发度高的情况下,就会有问题。
jtg98g3 2011-10-15
  • 打赏
  • 举报
回复
你的设计本身有问题,你应该好好的分析一下你的需求,然后确定好设计.在谈具体的实现吧.
  • 打赏
  • 举报
回复
给表枷锁
卧_槽 2011-10-14
  • 打赏
  • 举报
回复
lock就行了。
苦苦挣扎中 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 lvfeng19806001 的回复:]
引用 34 楼 zdbb 的回复:

那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?

回复:
lock可能可行,但是你的操作比较多,相对代码多执行时间长,这样出问题的几率大。建议还是数据库里做记录来标识,简单好用。
定时怎么弄:就是在数据库管理的作业jobs增加1个每秒执行的作业,内容就是执行一段Sql语句,Sql功能是判断表C的记录的时间是否到执行时间,比如……
[/Quote]
其实只要实现就行,方法不是很重要
不老神仙 2011-10-14
  • 打赏
  • 举报
回复
给方法加锁是最好最简便的方法 lock monitor mutex都可以 
lvfeng19806001 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 zdbb 的回复:]

那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?

回复:
lock可能可行,但是你的操作比较多,相对代码多执行时间长,这样出问题的几率大。建议还是数据库里做记录来标识,简单好用。
定时怎么弄:就是在数据库管理的作业jobs增加1个每秒执行的作业,内容就是执行一段Sql语句,Sql功能是判断表C的记录的时间是否到执行时间,比如执行时间不超过3分钟,如果当前时……
[/Quote]
谢谢你的回复,我现在已经用application实现了,一个key存是否锁定状态,一个key存时间,感觉思路和你这个差不多,我想问下我这个有没有什么大的问题?
wcj1018_net 2011-10-14
  • 打赏
  • 举报
回复
lock monitor 单例模式都可以
只在此山中 2011-10-14
  • 打赏
  • 举报
回复
那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?

回复:
lock可能可行,但是你的操作比较多,相对代码多执行时间长,这样出问题的几率大。建议还是数据库里做记录来标识,简单好用。
定时怎么弄:就是在数据库管理的作业jobs增加1个每秒执行的作业,内容就是执行一段Sql语句,Sql功能是判断表C的记录的时间是否到执行时间,比如执行时间不超过3分钟,如果当前时间是13:00,表C记录字段时间是12:57,那就表示超时了然后把表C记录删除,没超时就不删。
kevinmartin 2011-10-14
  • 打赏
  • 举报
回复
可惜结贴了
yidongliange4 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jinkuang45 的回复:]

用 lock 锁
[/Quote]

锁不行吧 ?多个用户访问的时候IIS给每个访问用户分配的是新的线程新的对象。

在application中加个是否在执行的标志呢?
zzz9413 2011-10-13
  • 打赏
  • 举报
回复
补充,执行操作之前,先判断IsLock状态,
如果没锁,正常操作。
如果锁定,判断锁定人是否在线。锁定人不在线,也可正常操作。(这里冗余设计一下无所谓)
zzz9413 2011-10-13
  • 打赏
  • 举报
回复
不管怎么复杂,只要是对某一条记录操作,都可以用以下方法:
我的做法是数据库设计一个IsLock 和currUser字段。代表谁正在锁定这条记录

开始修改时,先锁定这条记录 updateset 表名 set IsLock ='true',currUser='当前操作用户'
操作结束后
update这条记录set IsLock =‘false’


如果该用户不在线,则自动将该用户锁定的记录解锁
lvfeng19806001 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 zdbb 的回复:]

在数据库加个操作记录表C,一个用户A操作时判断表记录空则在表C插入操作开始时间记录,这样A可以继续操作到结束,然后删除插入记录。
同时如果用户B操作先判断表C记录,记录不为空无法操作,直到A退出才能操作。
也可以在数据库Agent job中加定时判断操作是否异常,如果异常可以清楚表C记录,避免死锁。
[/Quote]
那个加定时判断操作是否异常的怎么弄?
上面很多人说的lock可行不?
只在此山中 2011-10-13
  • 打赏
  • 举报
回复
在数据库加个操作记录表C,一个用户A操作时判断表记录空则在表C插入操作开始时间记录,这样A可以继续操作到结束,然后删除插入记录。
同时如果用户B操作先判断表C记录,记录不为空无法操作,直到A退出才能操作。
也可以在数据库Agent job中加定时判断操作是否异常,如果异常可以清楚表C记录,避免死锁。
加载更多回复(27)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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