现实工作中有时会需要对Access数据库进行并发(异步)访问。比如,如果有多台打印机同时打印发票,发票号码是从Access数据库中取得的。由于不应重复使用发票号码,所以取发票号码这个操作需要并发(异步)控制。
在这里,我用 生成连续的整数 来代替 需要并发(异步)控制的操作(比如,取发票号码)。
存储连续整数的表:temp1(co1 int)
并发(异步)控制使用的表:exclude(GenerateID varchar(50),AutoGrowID int identity(1,1) primary key)
AutoGrowID是自动编号列
生成连续整数的过程是:
首先,获得权限。
插入表 exclude 一行数据,得到该行的 AutoGrowID 值(记为insertID)。得到表 exclude 中最小的 AutoGrowID 值(记为minID)。
当 insertID == minID 时,即获得权限。
然后,生成连续的整数。得到表 temp1 的最大 col1 值(记为maxValue)。将 maxValue+1 插入到 temp1 中。
最后,删除开始时在表 exclude 中生成的行。
说明:获得权限时,需要通过循环来等待插入的 insertID 成为最小值。在循环的过程中我加入了一段延迟时间。如果不加延迟,当并发数目
大时(比如5个以上),就容易出现程序错误。
测试的过程是:
平均每隔一秒(0.5s的固定制+[0-1]s的随机值)执行一次 生成连续的整数 操作。
同时打开多个应用程序(10个左右),点击开始,就可以测试了。
可以通过查看数据库中两个表的数据和测试程序显示的数据来来验证结果。表 temp1 中的值应该是连续的。
所用应用程序退出后exclude表应为空。源代码: http://download1.csdn.net/down3/20070614/14182137996.rar
获得权限的代