多个客户端操作甘特图时,如何做才能实现不允许对一个控件并发操作
2011-10-08 16:15
417 查看
背景:c#开发C/S程序,甘特图界面,后台使用oracle数据库。
该甘特图界面是一个控件拖动界面,每个控件的移动代表着资源的分配情况。有多客户端操作。
方式一:
在一个用户进行拖动时,首先使用select * from tablename where 该资源记录的过滤条件 for update nowait,将该记录加锁,为提高效率,将其封装入存储过程中。
这样当另一个用户试图同时拖动时,会出现Exception提示资源正在被使用,禁止同时操作。
当第一个用户拖动操作完成时,将该行锁释放(执行rollback)。
好处:不用更改表结构,效率高。
方式二:
在后台数据库的分配的资源情况表中加入一个字段,用来做资源是否正在拖动的状态记录,如果正在被拖动,则更新为0,拖动完毕为1。
在一个用户进行拖动时,首先更改该状态记录为0,拖动完毕后,更新为1。
另一个用户进行同时拖动时,会先查看该字段是否为1。
好处:依赖后台数据库进行处理。
不好的地方:更改表结构,效率比方式一低。
方式三:
岗位管理责任制,限定不同权限或者不同的岗位操作不同的控件。:)
该甘特图界面是一个控件拖动界面,每个控件的移动代表着资源的分配情况。有多客户端操作。
方式一:
在一个用户进行拖动时,首先使用select * from tablename where 该资源记录的过滤条件 for update nowait,将该记录加锁,为提高效率,将其封装入存储过程中。
这样当另一个用户试图同时拖动时,会出现Exception提示资源正在被使用,禁止同时操作。
当第一个用户拖动操作完成时,将该行锁释放(执行rollback)。
好处:不用更改表结构,效率高。
方式二:
在后台数据库的分配的资源情况表中加入一个字段,用来做资源是否正在拖动的状态记录,如果正在被拖动,则更新为0,拖动完毕为1。
在一个用户进行拖动时,首先更改该状态记录为0,拖动完毕后,更新为1。
另一个用户进行同时拖动时,会先查看该字段是否为1。
好处:依赖后台数据库进行处理。
不好的地方:更改表结构,效率比方式一低。
方式三:
岗位管理责任制,限定不同权限或者不同的岗位操作不同的控件。:)
相关文章推荐
- 桌上有一空盘,最多允许存放一只水果。爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。用wait、signal操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。
- 修改cassandra数据库中的keyspace副本因子后,如何操作才能实现已存数据的备份
- 如何在一个用户控件内操作另外一个用户控件的中的控件?
- C# winform datagridview中如何实现鼠标右键点击一行数据出现一个带有删除的菜单,并能执行删除操作?
- 如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作
- 如何操作客户端上的 AJAX Timer 控件?
- 【Java并发学习一】如何实现一个线程池
- 如何用LEADTOOLS 实现一个简单的STORE SCU存储客户端
- 客户端如何调用 Rational CM API 实现 Rational ClearCase 的相关操作
- 在客户端如何获取控件和操作控件(Xpage)
- 如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作(1)
- 一个Buton控件如何先执行客户端代码后执行服务器端代码的应用!
- 如何实现 客户端仅用一个IP地址,就可以连接到不同的服务器上
- 如何实现shell并发 一个入门级可控多线程shell脚本方案
- 如何在DataGrid 控件中实现自定义分页操作
- 如何在asp.net页面上放置的控件上实现左右键菜单,同时对之操作(2)
- Silverlight开发中的疑难杂症-控件设计篇-如何实现一个NumericBox(上)
- 一个PDF合并操作实现类,利用iTextSharp控件实现
- 如何在一个用户控件内操作另外一个用户控件的中的控件? (from LoveCherry)
- 如何用两个栈来实现一个队列,并分析有关队列操作的运行时间。