为了避免两人同时检索到一条记录,我的做法是这样的:
1、每条记录有一个状态,默认为:未访问
2、用户提取条件为 :select top 1 * from 表 where 状态=‘未访问’ 
3、用户提取一条记录是马上把这条记录的状态置为"访问中",访问完毕置为"访问完毕"
但是还是存在重复提取现象。各位高手,我该怎么办啊?

解决方案 »

  1.   

    你不能用事务吗?
    如Cnn.BeginTrans
    update 表 状态=状态  where 状态=‘未访问’ 
    .
    .
    .
    Cnn.CommitTrans
      

  2.   

    你是用什么数据库?
    如果是 MS SQL Server
    那么你可以用 事务 加上 事务隔离级别 来限制数据访问
    详细请看 帮助SET TRANSACTION ISOLATION LEVEL
    指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。READ UNCOMMITTED执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。REPEATABLE READ锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。SERIALIZABLE在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。