多用户同时操作同一张表时怎样避免重复保存相同记录??请大家给点建议!!

cjc19281 2002-12-18 08:07:52
比如说:有一张请购单(对应请购单表),主键是“请购单号”,填请购单的时候请购单号是取最大的请购单号加一,所以如果用户一个挨一

个按顺序操作是不存在产生重复记录的问题的。但是可能发生在很短的时间内有两个用户开请购单,这时这两张请购单的请购单号就相同了。

我要问题就是怎样避免这种情况的发生?或发生了这种情况后的解决??

我的解决方法是在提交请购单的时候再判断一次'请购单号'是否重复,但我认为这样做既麻烦又使用户感到困惑(我做的好好的为什么报错!)

所以请大家给点建议!!(多给点!谢谢^_^)
...全文
209 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjc19281 2002-12-20
  • 打赏
  • 举报
回复
谢谢大家给予的建议!谢谢!
shiyangking 2002-12-19
  • 打赏
  • 举报
回复
试一试,在数据库中定义一个序列,每次插入时调用
dragon2002 2002-12-19
  • 打赏
  • 举报
回复
我的解决方法是在提交请购单的时候叉入(insert操作时不填写id号)提交成功后从数据库中取出id 号填充在相应位置
ykn 2002-12-19
  • 打赏
  • 举报
回复
利用事务进行处理吧,在进行保存时,先进行判断,然后在保存。
CloneCenter 2002-12-19
  • 打赏
  • 举报
回复
数据库中定义为主键不就不重复了吗?
xuln 2002-12-19
  • 打赏
  • 举报
回复
事物,期间锁定表
udonome 2002-12-19
  • 打赏
  • 举报
回复
用触发器吧,插入之前判断一下
glboy 2002-12-19
  • 打赏
  • 举报
回复
我现在也碰上了跟这个类似的问题,因为是利用一存储过程先创建表的主键值ID,然后再联合其他数据进行记录插入,在并发操作时就会出现楼主所说的情况,现在我还没具体着手解决这个问题,我的想法是通过一个存储过程实现主键值调整,还有个想法是通过触发器进行解决该问题,不知道可行性如何,也请大家给予建议
w_baggio 2002-12-19
  • 打赏
  • 举报
回复
楼主本来设计的时候就错误了,你的请购单号申请之后如果没提交前,另一个用户也来申请的话,肯定会出现相同的,主键可以新增加一个ID来做。
w_baggio 2002-12-19
  • 打赏
  • 举报
回复
我觉得楼上的方法还是可行的。
dragon2002 2002-12-19
  • 打赏
  • 举报
回复
填写请购单时在某个textbox不要填写id插入时自动加id 如本来语句为:
myada.InsertCommand =new SqlCommand("insert into class([id],[grade]) VALUES (@id, @grade)",conn);
SqlParameter objParameter= new SqlParameter("@id",SqlDbType.Int,4);
objParameter.SourceColumn= "id";
objParameter.Direction=ParameterDirection.Input;
myada.InsertCommand.Parameters.Add(objParameter);
SqlParameter objP= new SqlParameter("@grade",SqlDbType.NVarChar,50);
objP.Direction=ParameterDirection.Input;
objP.SourceColumn="grade";

修改为:myada.InsertCommand =new SqlCommand("insert into class([grade]) VALUES (@grade)",conn);

SqlParameter objP= new SqlParameter("@grade",SqlDbType.NVarChar,50);
objP.Direction=ParameterDirection.Input;
objP.SourceColumn="grade";


插入成功(提交成功)后
再用fill取出id的值 ,副给textbox。

to mmkk() :
ID号是主键 也一样提交成功。 id自动加一是在设计数据库表时就确定的
mmkk 2002-12-19
  • 打赏
  • 举报
回复
To dragon2002:如果ID号是主键怎么可能不填会提交成功?
cjc19281 2002-12-19
  • 打赏
  • 举报
回复
dragon2002的主意也不错阿!^_^

to shiyangking:能不能把你的想方法说具体点呢??
cjc19281 2002-12-18
  • 打赏
  • 举报
回复
原来还有这招阿!开眼开眼了^_^!谢谢!谢谢!


还有关于象发票这种不是号码不连续的有没有比我用的更好的方法??
mmkk 2002-12-18
  • 打赏
  • 举报
回复
提交的时候判断...
mmkk 2002-12-18
  • 打赏
  • 举报
回复
捕获主键冲突,如果是SqlServer的话错误号是2627,也就是如果捕获到错误号为2627的Sql错误的话就重新取最新的请购单号就可以了
cjc19281 2002-12-18
  • 打赏
  • 举报
回复
关于自增:有些单据的号码不是按顺序来的,比如发票,但是却是绝对不能重复的,所以有没有其他的方法??
关于锁表:这个我不太懂,能不能具体说说??

主要我是想在用户制订单据的时候就已经避免了记录重复的问题,而不是到提交的时候!

还请大家给出些主意。谢谢!
yumiaojing 2002-12-18
  • 打赏
  • 举报
回复
如果有必要,可以在用户对表进行锁定
ajex 2002-12-18
  • 打赏
  • 举报
回复
将请购单号设为自增不就可以了.

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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