当前位置:编程学习 > C#/ASP.NET >>

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

我的思路是在数据库里加一个状态,被一个人点击后就会更新状态,别的人点击时查询已更新的状态就返回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("false!");
            }
            else
            {
                Response.Write("false!");
            }
        }
    }
--------------------编程问答-------------------- 求大神指教啊,不要秒沉= = --------------------编程问答-------------------- 使用悲观并发。
这个本不应该属于表现层的工作 。
--------------------编程问答--------------------
引用 2 楼 u010286221 的回复:
使用悲观并发。
这个本不应该属于表现层的工作 。


因为没有办法,不能让多人同时点击查询并更新同一条数据,不然会出问题…… --------------------编程问答-------------------- 只要有人占用,就标状态为1,占用的用户是谁,在占用期,每一段时间就用ajax向服务器发出占用最后时间的更新,可以是15秒一次,更新的时候需要验证,当期记录最后记录的用户ID与更新的用户ID要一至

其它用户判断,如果用户状态为1,且最后占用时间与当前时间不超过30秒(有时可能会出现网络延时,所以最好不要设置成15秒),就说明记录还是被占用着

如果状态为0或最后占用时间与现在时间比较超过30,那么就可以给他占有 --------------------编程问答-------------------- 悲观锁啊
点击之后判断是否有锁
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,