我的想在数据库里加一个状态,被一个人点击后就会更新状态,别的人点击时查询已更新的状态就返回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贡献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
手掌心
TA贡献1942条经验 获得超3个赞
@_dance:
呵呵,客气了,回复多少无所谓,今天刚有时间了,能解决问题更好撒!
更何况你这个问题确实很有意思!good luck ~~~只是给你方案!
- 35 回答
- 0 关注
- 954 浏览
添加回答
举报
0/150
提交
取消