为了账号安全,请及时绑定邮箱和手机立即绑定

怎么样让多个用户不能同时点击同一条数据

怎么样让多个用户不能同时点击同一条数据

慕盖茨4494581 2018-12-06 19:53:16
我的想在数据库里加一个状态,被一个人点击后就会更新状态,别的人点击时查询已更新的状态就返回false,但还有问题就是,如果多人同时点击同一个未更新状态的数据,这里应会出问题,怎么样才能防止多人同时点击同一条数据!!! protected void DataGrid1_ItemCommand(object source, DataGridCommandEventArgs e) { string id = DataGrid1.DataKeys[e.Item.ItemIndex].ToString(); string ssql = "select * from 数据表 with(tablockx) where ID='" + id + "'"; SqlDataReader dr = SQLHelper.Order(ssql); string a = dr["状态"].ToString(); dr.Close(); if (a == "处理中") { Response.Write("false!"); } else { string usql = "update 数据表 with(tablockx) set 状态='处理中' where ID='" + id + "'"; int i=SQLHelper.ExecuteSql(usql); if (i > 0) { Response.Write("ture!"); } else { Response.Write("false!"); } } } 但这样子貌似还有问题,请大家帮忙提提建议!!!
查看完整描述

35 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

我想问一下如果用户点进去没进行任何操作直接关闭窗口,那怎么办,是不是所有人都进不去了?

查看完整回答
反对 回复 2019-01-07
?
Helenr

TA贡献1780条经验 获得超3个赞

异步

查看完整回答
反对 回复 2019-01-07
?
慕慕森

TA贡献1856条经验 获得超17个赞

居然用表锁?直接乐观锁就解决了

create proc yourProcName

(

 @id varchar(15),

@version uniqueidentifier,

@HasViewd bit output

)

as

begin

declare @rowcount int

 set nocount off

 update tb set version=newid() where id=@id and version=@version

select @rowcount=@@rowcount

if(@rowcount=1)

set @HasViewd=1

else

set @HasViewd=0

end

查看完整回答
反对 回复 2019-01-07
?
莫回无

TA贡献1865条经验 获得超7个赞

@Beyond-bit: 肯教我这么多还是得谢谢你的,现在肯教人的人越来越少了,感觉,唉,还没有搞定呀,一楼那位朋友的方法可行,只是我的逻辑还没有想好~

查看完整回答
反对 回复 2019-01-07
?
慕容708150

TA贡献1831条经验 获得超4个赞

N多人订单处理~

查看完整回答
反对 回复 2019-01-07
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

想不到什么情况下会出现你需要的这种情况。

查看完整回答
反对 回复 2019-01-07
?
冉冉说

TA贡献1877条经验 获得超1个赞

@会长: update 表 set 字段='处理中' where 字段<>'处理中' and ID=id;

查看完整回答
反对 回复 2019-01-07
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

@_dance: 什么方法?

查看完整回答
反对 回复 2019-01-07
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

@会长: 恩,可以的,不过我想到一个更简单的方法,谢谢了~

查看完整回答
反对 回复 2019-01-07
?
四季花海

TA贡献1811条经验 获得超5个赞

@_dance: 查询和改状态放在一个事务里,同时给数据库加上“行锁”,这样行不行

查看完整回答
反对 回复 2019-01-07
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

我用了排它锁,但貌似查询后,再改状态时会有时间差= =,这怎么弄呢~

查看完整回答
反对 回复 2019-01-07
?
RISEBY

TA贡献1856条经验 获得超5个赞

我是坑,求大神不笑~

如果可以,你也可以教我一下Z~

查看完整回答
反对 回复 2019-01-07
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

lock 不会用?真奇怪。

查看完整回答
反对 回复 2019-01-07
?
潇湘沐

TA贡献1816条经验 获得超6个赞

不是太明白,请指教,谢谢了~

查看完整回答
反对 回复 2019-01-07
?
噜噜哒

TA贡献1784条经验 获得超7个赞

非要在数据库中维护状态么?在后台加锁不行么?

查看完整回答
反对 回复 2019-01-07
?
慕森王

TA贡献1777条经验 获得超3个赞

@Beyond-bit: 如果用户点进去未做任何操作,直接关闭窗口状态怎么修改,其他人怎么进去

查看完整回答
反对 回复 2019-01-07
?
萧十郎

TA贡献1815条经验 获得超13个赞

update 表 set 字段='处理中' where 字段<>'处理中' and ID=id;

查看完整回答
反对 回复 2019-01-07
?
手掌心

TA贡献1942条经验 获得超3个赞

@_dance: 

呵呵,客气了,回复多少无所谓,今天刚有时间了,能解决问题更好撒!

更何况你这个问题确实很有意思!good luck ~~~只是给你方案!

查看完整回答
反对 回复 2019-01-07
?
交互式爱情

TA贡献1712条经验 获得超3个赞

@Beyond-bit: 谢谢你能回复我这么多!

查看完整回答
反对 回复 2019-01-07
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

@Beyond-bit: 

还有如果大并发,我想那么你的app应该有集群来解决这种request并发吧!这样极大的降低了我们这里并发的情况吧!

查看完整回答
反对 回复 2019-01-07
首页上一页12下一页尾页
  • 35 回答
  • 0 关注
  • 954 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信