背景:c#开发C/S程序,甘特图界面,后台使用oracle数据库。
该甘特图界面是一个控件拖动界面,每个控件的移动代表着资源的分配情况。有多客户端操作。
方式一:
在一个用户进行拖动时,首先使用select * from tablename where 该资源记录的过滤条件 for update nowait,将该记录加锁,为提高效率,将其封装入存储过程中。
这样当另一个用户试图同时拖动时,会出现Exception提示资源正在被使用,禁止同时操作。
当第一个用户拖动操作完成时,将该行锁释放(执行rollback)。
好处:不用更改表结构,效率高。
方式二:
在后台数据库的分配的资源情况表中加入一个字段,用来做资源是否正在拖动的状态记录,如果正在被拖动,则更新为0,拖动完毕为1。
在一个用户进行拖动时,首先更改该状态记录为0,拖动完毕后,更新为1。
另一个用户进行同时拖动时,会先查看该字段是否为1。
好处:依赖后台数据库进行处理。
不好的地方:更改表结构,效率比方式一低。
方式三:
岗位管理责任制,限定不同权限或者不同的岗位操作不同的控件。:)