我的想在数据库里加一个状态,被一个人点击后就会更新状态,别的人点击时查询已更新的状态就返回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贡献1786条经验 获得超13个赞
@_dance:
好,那我们假设有并发,那你就用代码给其排队(队列)!让第一个人先走!其他的人都等着去吧!
理论上这种方法可行,不过需要实践!方案,仅供楼主参考!如有更好记得分享!good luck ~~~

POPMUISE
TA贡献1765条经验 获得超5个赞
@_dance:
你可以将这个超链接存到数据库,并且加一个status字段,初始化的时候是可以点击的,status 是激活!当如果有用户点击了,那么失效,status =失效!其他用户访问,逻辑层判断status是激活还是失效?如果失效说明有人点击了,还没执行完毕(ajax 执行完毕修改status状态)!response给其他访问者超链接都是失效的!

慕莱坞森
TA贡献1810条经验 获得超4个赞
@_dance:
A用户点击了,连接即可失效了(其他用户点击不响应,失效!),直到A用户走完这个流程,然后才会激活连接方可供下一个用户点击撒!下一个用户只要点击,那么超链接照样失效,后来的还是不能点击!如何?
- 35 回答
- 0 关注
- 1107 浏览
添加回答
举报
0/150
提交
取消