当前位置:编程学习 > C#/ASP.NET >>

求助-订单编号生成问题

求一个,能生成唯一订单编号的算法,最好不超过10位,纯数字更好。想过用把GUID转成短点的,不过一直没想到好的算法,各位大虾给点意见,能类似于淘宝订单那中编号最好了,不长不短全是数字。 --------------------编程问答-------------------- 自己根据日期时间序号,组合吧 比如 201107040001 --------------------编程问答-------------------- 时间戳 --------------------编程问答-------------------- +
引用 1 楼 bdmh 的回复:
自己根据日期时间序号,组合吧 比如 201107040001
--------------------编程问答-------------------- 简单的就是时间+序号,每次都从数据库查出最大的号+1,就ok --------------------编程问答-------------------- 如果同时有很多人操作,而且,一秒种内的批量插入量在20+以上的数据,从数据库ID里读出来再+,有困难吧
--------------------编程问答-------------------- 主键自动增长,保存  

编号为   20100704 +主键  再保存  ,完事 --------------------编程问答-------------------- 有一种比较土但是也比较常用的办法:
创建一个订单号临时表 TempOrder(有一个ID自增列,有一个GUID列)
最终订单号,一般是yyyyMMdd当日订单序号
1)insert TempOrder
2)select * from TempOrder
where Guid = guid
3)delete from TempOrder
where Guid = guid
如果是SQL SERVER,则上面三条语句可以在一个command中一次执行完毕。

注意三条语句尽量不要与业务事务一起执行,避免因此引起并发操作瓶颈 --------------------编程问答-------------------- 1)insert TempOrder
2)select * from TempOrder
where Guid = guid
3)delete from TempOrder
where Guid = guid
--------------------编程问答-------------------- 建一个最大流水号表
用存储过程取,存储过程内每次取出后+1 即可! --------------------编程问答-------------------- 学习。 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
自己根据日期时间序号,组合吧 比如 201107040001

这个在多用户环境下序号没法同步,因此
 
引用 6 楼 qzyuanmu 的回复:
主键自动增长,保存  

编号为 20100704 +主键 再保存 ,完事

这个的前提是必须使用数据库,而且还要先插入一下再处理,用户放弃时还要回滚,因此

所以貌似简单的东西,其实不简单 --------------------编程问答-------------------- 至于逻辑的话,LS都差不多说完了~~
存储过程来实现逻辑 --------------------编程问答-------------------- 这个问题对于B/S或三层架构的C/S系统都不是问题,但对于两层的C/S来说就比较难。 --------------------编程问答-------------------- 你用Random函数实现就可以了,前面按日期+四位的随机数。 --------------------编程问答-------------------- 关注!!! --------------------编程问答--------------------  可以获得当前时间后,循环+1就OK,然后赋值给文本里 --------------------编程问答-------------------- 存储过程查最大号+1 --------------------编程问答--------------------
引用 13 楼 etudiant6666 的回复:
这个问题对于B/S或三层架构的C/S系统都不是问题,但对于两层的C/S来说就比较难。

这个关三层架构什么事? --------------------编程问答-------------------- datetime。now.tostring("yyyyMMddhhmmss") --------------------编程问答--------------------
引用 18 楼 jingrenhai 的回复:
引用 13 楼 etudiant6666 的回复:
这个问题对于B/S或三层架构的C/S系统都不是问题,但对于两层的C/S来说就比较难。

这个关三层架构什么事?

这里的三层指的是数据库-中间件-客户端,由于B/S与中间服务器都只有一个服务点,因此比较好维护编号生成器,而数据库-客户端的编号生成器是在客户端做的,就麻烦很多,7楼的办法是可行的,但是写入数据库会对性能造成一定影响。 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
自己根据日期时间序号,组合吧 比如 201107040001
Y --------------------编程问答-------------------- 7楼,9楼的说的其实我都考虑过,不过我想说的是,不通过数据库就能生成唯一编号。 --------------------编程问答-------------------- 日期+操作员编号+序号
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,