.NET多用户事务处理(在线等)

来源:百度知道 编辑:UC知道 时间:2024/09/22 22:36:21
现在假设有两个用户(A用户和B用户)同时访问table表
A和B同时读取了table数据,此时A修改了table表的一条记录并已成功提交数据库,这时B也要修改该条记录,但此时B的记录是脏数据,这种情况如何防止,不让B用户在脏读的情况下继续修改!!!
知道的请告知下,本人用的是.NET2005(C#)和SQL SERVER 2005数据库
在线等!!!!!!!!!!!
送下50分!!!!!!!!!!!
lock 是对单个用户操作有效果的,对于多用户来说是没有用的
还有就是A用户和B用户是拥有相同的权限的,都是可读可写的

1、在表里加一个版本控制字段(TimeStamp)记录最后修改时间
2、取数据时,也取出版本控制字段
3、更新时,启动事务
4、取出版本控制字段并锁要编辑的记录(select ... from ...with(rowlock) where ...)
5、比较版本是否一致(“1、的版本控制字段”和“4、的版本控制字段”)
6、不一致,回滚,结束
7、更新记录,同时将版本控制字段设为当前DB时间
8、提交

lock(obj)
{
// 读写表
}

如果读取是为了修改,那么sql可以写成
select * from tb where …… for update
这样就加了锁
其他的用户只能读不能修改

so A读取的时候用 forupdate B只能看,不能改(用for update查询的话有提示,不能操作)

你知道lock吧?试下。
所以的操作执行时候就lock或者设置权限属性。