日期:2014-05-17  浏览次数:20595 次

生成订单号码
我设想先先从数据库里提取出当天最大的订单编号(如20121124005),在C#里面用代码将该编号进行加1操作,然后再把加1后的订单编号写入数据库。因为是要做订票网站,为了实现订单编号不重复,我打算用锁或事物来处理。但是这是问题出现了,begin tran
             select(订单编号) ....
             insert(@加1后的订单编号).....
             commit tran
这过存储过程没等我把(@加1后的订单编号)传进去就进行了insert(@加1后的订单编号).....操作,当时(@加1后的订单编号为空。
各位有解决上述问题的方法吗?
------解决方案--------------------
http://blog.csdn.net/wenhuijoe/article/details/5317430看下这个。

------解决方案--------------------
引用:
我设想先先从数据库里提取出当天最大的订单编号(如20121124005),在C#里面用代码将该编号进行加1操作,然后再把加1后的订单编号写入数据库。因为是要做订票网站,为了实现订单编号不重复,我打算用锁或事物来处理。但是这是问题出现了,begin tran
             select(订单编号) ....
             insert(@加1后的……

你这个都在存储过程里面实现了,肯定不会等你c#来做了才执行拉,一次性就跑完了这个存储过程,同时不建议你这样前后台来实现。理由:
1、你要等待前端即用户的响应,这时可能会导致锁的持有时间过长影响性能甚至死锁。
2、如果你前端操作时间过程。可能在多并发的时候,别人已经插入数据,这样你获取的就不是当前最大的了。
可以考虑全部在存储过程里面实现,类似:
insert into tb(xxx)
select max(id) from tb

具体可以看看:http://blog.csdn.net/dba_huangzj/article/details/7685162