求一个同步解决方案(说思路就行)

论文MVP网 2009-03-16 05:37:05
我做的是.NET WINFORM程序,环境这样的:
计算机A,B,C,D,E 5台计算机 他们分别对录入的商品进行处理,
但是如果A,处理了,其他所有机器都不能处理,如果B处理了,其他所有计算机也都不能处理,依次类推,
也就是说操作的过程是不可以重复的操作,但是A-E还是同时进行的,有可能会发生装车现象,就是2面同时操作了,所以一般WINFORM来解决这样的问题是怎么处理的?

我想用到进程锁定的办法(或者我的方法说不太清楚,或许不是这个名称),就是当第A电脑操作的时候他锁住这个东西,让其他人都不可以碰,我感觉应该用这样的方法,但是具体怎么实现呢? 或者我的办法有些麻烦?还是或者winform下解决这样的情况有别的办法? 如果说用我的办法,他叫什么名字?我怎么去查资料呢?
或者说一般你们来解决这个情况,用的什么方法来告诉我下也可以谢谢。?欢迎探讨

MY qq 804206885 会的联系我下 谢谢 不会的帮我顶贴别白来,到时候我多给大家点分
...全文
158 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
悔说话的哑巴 2009-03-17
  • 打赏
  • 举报
回复
控制好进程就OK
zzxap 2009-03-17
  • 打赏
  • 举报
回复
不用针对机器来控制,只要针对某条记录来控制就行了。

读取一条记录的时候获取他的时间戳,修改的时候,根据这个时间戳和id号修改

如果时间戳不一样了,就证明别人修改过了,就不会执行当前操作,
zzxap 2009-03-17
  • 打赏
  • 举报
回复
数据库用时间戳控制
wangping_li 2009-03-17
  • 打赏
  • 举报
回复
基本上都是提交数据之前要判断一下该记录的已有状态,如果状态不能满足提交状态,则抛异常
如果修改前状态是1,修改后是2
提交前则判断数据库的状态是否还是1
这样的东西在存储过程里面最好处理了
wangping_li 2009-03-17
  • 打赏
  • 举报
回复
计算机A,B,C,D,E 5台计算机 他们分别对录入的商品进行处理,
但是如果A,处理了,其他所有机器都不能处理,如果B处理了,其他所有计算机也都不能处理,依次类推,

你用事务不就好了?添加事务的隔离级别

TransactionOptions options = new TransactionOptions();
options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
try
{
//操作
scope.Complete();
}
catch(Exception) { }
}


根据你选一个下面的项就行了:
Serializable 可以在事务期间读取可变数据,但是不可以修改,也不可以添加任何新数据。
RepeatableRead 可以在事务期间读取可变数据,但是不可以修改。可以在事务期间添加新数据。
ReadCommitted 不可以在事务期间读取可变数据,但是可以修改它。
ReadUncommitted 可以在事务期间读取和修改可变数据。
Snapshot 可以读取可变数据。在事务修改数据之前,它验证在它最初读取数据之后另一个事务是否更改过这些数据。如果数据已被更新,则会引发错误。这样使事务可获取先前提交的数据值。
Chaos 无法覆盖隔离级别更高的事务中的挂起的更改。
Unspecified 正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。如果设置了此值,则会引发异常。

relive_qiankai 2009-03-17
  • 打赏
  • 举报
回复
不会 帮顶!
zxdouzx 2009-03-17
  • 打赏
  • 举报
回复
数据库里面如何记录签入 迁出。。?
我们公司到是用VSS来进行版本的控制。。。
当某个页面被签出来的话 其他的就不能在改了。。
顶起。。。我也像知道答案。。
wanghui0380 2009-03-17
  • 打赏
  • 举报
回复
可以仿照一些版本控制软件的做法
记录一下签入,签出的状态就可以了
abc3316 2009-03-17
  • 打赏
  • 举报
回复
不知道你的环境是什么

不过一般情况下这样的东西我会用队列。
utopia54 2009-03-17
  • 打赏
  • 举报
回复
我的项目是增加的这么一个时间列"timestamp"来判断有没有多端操作
yangcom2008 2009-03-17
  • 打赏
  • 举报
回复
或者说所有的客户端都调用WBESERVICE,WEBSERVICE中的方法或使用的方法使用同步。
yangcom2008 2009-03-17
  • 打赏
  • 举报
回复
商品的编号应该是唯一的吧,我觉得在数据库中处理就可以了,如果有相同编号的数据再次插入表中,就放弃掉。
xutao888 2009-03-17
  • 打赏
  • 举报
回复
不用做什么特殊处理阿?只需要判断哪些是处理过的数据就行了,不用担心两个人同时处理一条记录的问题
深海之蓝 2009-03-17
  • 打赏
  • 举报
回复
正常数据库默认的 是可以同时查询,但添加、删除、更新操作同时只能一个人操作,同时操作的话,数据库会自动同步的,你可以捕获一下异常
论文MVP网 2009-03-17
  • 打赏
  • 举报
回复
大家 现在基本说的都是一个标识查询问题 但是在他们判断标识的时候 是否会出现查询过程都查询到了 可以修改标示?
估计这点也会遇到重复吧?
UP
wang355 2009-03-17
  • 打赏
  • 举报
回复
用数据库级的事物处理,添加事物隔离就好了,应该可以
论文MVP网 2009-03-17
  • 打赏
  • 举报
回复
时间戳 我感觉是个不错的注意 呵呵
有没有人反对时间戳的? 有漏洞吗?
surlew 2009-03-16
  • 打赏
  • 举报
回复
顶了,我现在也在开发winform方面的软件,这个也考虑过,有点难度,不过我的是有对应的编号处理的,
不同的人做相同的事,我会给他生成新的编号!这样能防止数据错误,挺笨的方法,希望能开阔你的思路!
zgke 2009-03-16
  • 打赏
  • 举报
回复
如果是数据库...你可以添加一列为处理标记..其他人在处理的时候判断这个标记就好了.. 不是数据库的.你可以通过SOCKET进行消息发送.控制你输入窗体..不懂进程锁的说
nihaimeiyoudenglu 2009-03-16
  • 打赏
  • 举报
回复
在数据库中给定个几字段,说明这个商品有人在处理,谁在处理,什么时候处理的.
另一机子处理的时候,识别一下就行了.

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧