CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

求助生成ID的思路,60分

楼主boyjuky(boyjuky)2006-06-01 16:46:04 在 .NET技术 / ASP.NET 提问

 
  要求如下:  
   
  部门唯一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

相关问题

关键词

得分解答快速导航

  • 帖主:boyjuky
  • huangkc
  • zhuowei
  • xiaogaohui
  • TCat
  • softdeveloper

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo