首页 |缤纷校园 |心理援助 |英语世界 |公务员 |考研天地 |资格考试 |电脑认证 |免费论文 |实用文档 |求职就业 |论坛 |网络课堂 |留言版
 电脑认证首页     考试专题 考试提醒 计算机等级考试 计算机认证水平考试 IT认证 论坛
 最近更新
· [计算机专题]实现一个用户取过的数据不…
· [计算机专题]讲解数据库中行级转换成列…
· [学习辅导]在SQLServer2005中用语句创…
· [学习辅导]建立Java编程网络管理应用…
· [计算机专题]Windows操作系统网络管理技…
· [学习辅导]拓扑感知型的集成式网络和…
· [学习辅导]细心分析网络存在的安全隐…
· [学习辅导]谁想改我的WindowsVista桌…
· [学习辅导]恢复VistaSP1系统恢复光盘…
· [计算机专题]远程管理Windows服务器实用…
 精品课程
· [精品课程推荐]08年投资项目管理师考…
· [精品课程推荐]08年职称日语考试辅导…
· [精品课程推荐]08年环境影响评价师辅…
· [精品课程推荐]08年质量资格考试辅导…
· [精品课程推荐]08年会计职称辅导报精…
· [精品课程推荐]08年建筑师考试辅导京…
· [精品课程推荐]08职称英语考试辅导王…
· [精品课程推荐]08年咨询工程师考试名…
· [精品课程推荐]08年监理工程师考试辅…
· [精品课程推荐]经济师考试网上辅导报…
 考试动态
· [二级考试动态]2008年计算机等级考试时间…
· [二级考试动态]上海:2008年上半年全国计…
· [二级考试动态]北京:2007年9月计算机等级…
· [二级考试动态]2007年12月全国计算机职业…
· [二级考试动态]青岛:2008年上半年计算机…
· [二级考试动态]宁夏:2007年9月计算机等级…
· [二级考试动态]北京地区计算机等级考试10…
· [二级考试动态]北京:07年下半年计算机等…
· [二级考试动态]2008年4月全国计算机等级考…
· [二级考试动态]2007年下半年计算机等级考…
 试题下载
· [试题下载]2007年计算机等级考试二级…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]2007年9月二级VB试题答案
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机二级VF模拟…
· [试题下载]2007年9月计算机二级VB模拟…
· [试题下载]2007年9月计算机等级考试二…
· [试题下载]VC++中利用/GS开关防止缓冲…
· [试题下载]2007年4月计算机等级考试二…
 学习辅导
· [学习辅导]在SQLServer2005中用语句创…
· [学习辅导]MoreEffectiveC++:指针与…
· [学习辅导]MoreEffectiveC++:不使用…
· [学习辅导]Linux下C++异常处理技巧--…
· [学习辅导]如何使编译后的程序运行时…
· [学习辅导]2007年计算机二级VF编辑
· [学习辅导]2007年C语言辅导:可移植性
· [学习辅导]2007年制作风格独特的按钮
· [学习辅导]2007年VFP中使用Grid控件设…
· [学习辅导]MoreEffectiveC++之考虑变…
 

实现一个用户取过的数据不被其他用户取到

文章录入:admin    责任编辑:admin   2008-3-26 16:48:08  来源:考资网  点击数:
 

  实现一个用户取过的数据不被其他用户取到:

  问题:

  在用ADO访问数据库时,从一个表中取一定的记录(比如20行),取出后在程序中使用,使用完后删除掉记录(不用更新或删除记录)。在多用户操作下(每个用户采用相同的操作),如何保证一个用户已选取的记录不被其他用户选取?

  解决方法:

  处理此类问题的一般方法是增加一个标志列,每个用户取的记录设置一个标志,新的用户只从标志为未取的记录中获取记录。

  在本文中将会利用事务与锁来控制数据的处理,不需要增加任何标志列。

  解决的具体示例:

  1.建立测试环境

USE tempdb

GO

 

CREATE TABLE dbo.tb(

id int identity(1, 1), 

name nvarchar(128))

 

INSERT tb(name)

SELECT TOP 100 

name

FROM syscolumns

GO
  2.模拟第1个用户

-- 查询窗口发出下面的查询语句

BEGIN TRAN

-- 事务不提交或者回滚, 以保持锁不释放

SET ROWCOUNT 20

SELECT * 

FROM tb WITH(UPDLOCK, READPAST)

-- UPDLOCK 让锁保留到事务结束, READPAST 跳过已经锁定的数据

  3. 模拟第2个用户(语句与第1个用户一样,只是在另一个连接中执行)

-- 查询窗口发出下面的查询语句

BEGIN TRAN

-- 事务不提交或者回滚, 以保持锁不释放

SET ROWCOUNT 20

SELECT * 

FROM tb WITH(UPDLOCK, READPAST)

-- UPDLOCK 让锁保留到事务结束, READPAST 跳过已经锁定的数据

  4.结果

  大家可以看到:查询窗口1列出了前20条数据,查询窗口1列出了21-40条数据。

  此时就实现了不同的用户取不同数据的需求.

  注释::在 处理完成后, 删除记录, 然后提交事务就可以了。

  • 上一个文章:

  • 下一个文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    关于本站 - 广告服务 - 站内导航 - 网站声明 - 友情链接 - 联系我们
    Copyright©2003-2008 www.dastu.com, All Rights Reserved.

    心语心愿科技(北京)有限责任公司 版权所有

    鄂ICP备05000022号