我想的是在数据库里加一个状态,被一个人点击后就会更新状态,别的人点击时查询已更新的状态就返回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!");
            }
        }
    }asp.netsql serverC#数据库

解决方案 »

  1.   

    请问有没有办法让数据更新一次后就不可以再更新了~
    加一个标志位呗,更新过一次之后设为false,更新前先读取标志位,如果是false就不更新
      

  2.   

    lock(this)
    {
    不让重复更新的代码
    }
      

  3.   

    请问有没有办法让数据更新一次后就不可以再更新了~
    加一个标志位呗,更新过一次之后设为false,更新前先读取标志位,如果是false就不更新
    并发情问下,这个跟我那段代码出现的问题是一样的~
      

  4.   

    我想了,只是查询与更新不分开应就可以的,我代码里加了排它锁,所以只要查询与更新作为一个事务连续执行应就没有问题了吧。请问SQL,能不能一句语句表达,如果字段为空就更新成“处理中的状态”,不为空就什么也不做,一句SQL来表达!!!
      

  5.   

    update table set t1 = ''
    where (select 字段 from table) is null