求助生成ID的思路,60分
要求如下:
部门唯一ID,长度代表部门级数,每三位为一级编码.
如:深圳总部为001,深圳的行政部为0011001
请问如何用C#实现
问题点数:60、回复次数:13Top
1 楼boyjuky(boyjuky)回复于 2006-06-01 16:47:37 得分 0
上面打错了
如:深圳总部为001,深圳的行政部为001001
Top
2 楼lowtemper(小镇姑娘她爹)回复于 2006-06-01 16:48:59 得分 0
用stringbuilder去连接Top
3 楼sbsrg3000(⊙⌒⊙怪事,这几天可用分又没增加....)回复于 2006-06-01 16:54:20 得分 0
markTop
4 楼boyjuky(boyjuky)回复于 2006-06-01 16:56:01 得分 0
有没有实例给一下???Top
5 楼shoutor(www.mouxiao.com)回复于 2006-06-01 16:58:18 得分 0
不是很明确,没办法找到通用的属性Top
6 楼huangkc(软贱&henchman)回复于 2006-06-01 16:59:23 得分 5
建议,在数据库中建一表保存此产生规则及当前号
数据库中用存储过程或函数,来产生ID
前台保存时调用
Top
7 楼zhuowei(I'm MS MVP)回复于 2006-06-01 17:01:32 得分 5
我觉得这就是一个字符串拼接问题啊
stringbuilder的Append去连接
当然你事先得有部门啊什么的ID号
什么意思? 不是很懂
Top
8 楼boyjuky(boyjuky)回复于 2006-06-01 17:05:46 得分 0
这是插入记录时产生ID用的
部门唯一ID可以自动加1,视有无上级部门,生成的ID标识不同的部门级别啊
如:深圳总部为001,深圳的行政部为0011001Top
9 楼xiaogaohui(陈胜吴广你们在哪里~~)回复于 2006-06-01 17:11:34 得分 20
建表:
Deparment
DepartmentID varchar //同级的顺序ID号
ParentID varchar //上级部门ID
length int 级数
CurrentDepartmentID varchar 当前的部门号=ParentID + DepartmentID
//
在每次insert或者update的时候通过程序
循环读取上级部门的ID组合成新的ID,在同级ID时候读取最大的ID+1,主意类型转化.Top
10 楼int64(@163.com:所有的程序员都应该团结起来!)回复于 2006-06-01 17:12:52 得分 0
这个思路就可以了吧
根据长度就知道级别了,根据代码就知道具体部门了
字符串处理不用再说了吧Top
11 楼boyjuky(boyjuky)回复于 2006-06-01 17:16:56 得分 0
好的..谢谢各位...我按你思路研究下...看可不可以实现.Top
12 楼TCat(蚊子)回复于 2006-06-01 17:26:09 得分 20
一般都是在数据库里做,这样当很多用户并发的时候,不会产生重发的ID值
create table P_TableID
(
id int identity,
TableName varchar(50),
TableIDValue Varchar(50)
)
insert into P_TableID
select 'P_D02','R200603300001'
create procedure P_FLY_GetTableNewID
as
declare @Value varchar(50)
declare @strTodayDate varchar(8)
select @Value=TableIDValue from P_TableID where tablename='P_D02'
if (@Value is null)
begin
set @Value = 'R'+convert(varchar,getdate(),112)+'0001'
insert into P_TableID select 'P_D02',@Value
end
else begin
set @strTodayDate = substring (@Value,2,8)
if @strTodayDate = convert(varchar,getdate(),112)
begin
set @Value = max(substring (@Value,10,4))+1
set @Value = 'R'+@strTodayDate+replicate('0',4-len(@Value))+@Value
end
else
set @Value = 'R'+convert(varchar,getdate(),112)+'0001'
update P_TableID set TableIDValue = @Value where TableName = 'P_D02'
end
select @ValueTop
13 楼softdeveloper(笨蛋天才)回复于 2006-06-01 18:00:33 得分 10
很好办啊,你记录两个字段,一个是级别,一个是编号,程序里进行解析。如第三级的2号就是001001002.编号如何产生呢?取出同级别的最大编号,可以根据长度来确定级别,如第三级select max(dep_No) from depart where length(dep_no) = 9 。然后把编号加1,再组成原始的编号Top




