如何提示记录已被锁住

wanghao2794 2010-08-31 06:23:24


环境: C# + Sql Server2005

现有以下情境:一张采购购单,同时有user1,和user2 在查看,这时user1点击了修改的按钮采购单
进入修改模式,随后user2也点击修改按钮,此时应该怎么通知user2采购单已被锁住
不允许修改???
...全文
55 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuqilin1987 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanghao2794 的回复:]
引用 2 楼 wuyq11 的回复:

数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除


SELECT * FROM table WITH (HOLDLOCK)执行这个语句后
再……
[/Quote]

你试试使用 return cmd.ExecuteNonQuery();这样是返回受影响的行数,如果大于0那么就知道该方法正确。
wanghao2794 2010-09-01
  • 打赏
  • 举报
回复
sql2005中有没有类似类似于oracl的 "WHERE ROWID = ? FOR UPDATE NOWAIT " 语句呢?

wanghao2794 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyq11 的回复:]

数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
[/Quote]

SELECT * FROM table WITH (HOLDLOCK)执行这个语句后
再执行update 语句其实是没有值返回的的(没有值返回在程序中如何知道正在执行锁呢??),
一直要等到到SELECT * FROM table WITH (HOLDLOCK)执行commit后才能update.


jointan 2010-08-31
  • 打赏
  • 举报
回复
在tempdb中建一个互斥表(一个固定名称的空表)//选择tempdb的原因是不需要考虑断网,断电等因素

修改前检查是否存在,不存在重建,存在则退出
修改后删除
wuyq11 2010-08-31
  • 打赏
  • 举报
回复
数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
lishuai1030 2010-08-31
  • 打赏
  • 举报
回复
那就增加一个字段 记录状态 如果user1在修改中就修改状态值
然后点user2的时候判断状态是否可以修改 不能则提示不允许修改

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧