+ -
当前位置:首页 → 问答吧 → asp.net怎么实现自动编号

asp.net怎么实现自动编号

时间:2011-12-25

来源:互联网

各位大虾 怎么实现自动编号 这个编号是单据号 就是当前时间+号码 2011-12-25-0001如果是第二天变成2011-12-26-0001编号又从0001开始 各位大虾帮帮忙 急啊

作者: liao847   发布时间: 2011-12-25

DataTime.Now.ToString("yyyy-MM-dd')+获取最大编号.PadLeft('0',4);
或在sql里使用getdate生成编号

作者: wuyq11   发布时间: 2011-12-25

从数据库中取出当天的最大号码,如果不存在,则int n=0;

如果存在,则n=最大号码+1;(注意substring得到最后四位,转成int)

string code=n.ToString("D4");

code=DateTime.Now.ToString("yyyy-MM-dd")+"-"+code;

写入数据库

作者: dalmeeme   发布时间: 2011-12-25

还是使用触发器吧,不用担心并发时产生重复编号的问题。在关键数据上不要心存侥幸,认为用户数很少,就不会产生重复编号,我曾经在一个每天只会产生二三十笔数据的系统中,直接取最大值加一的方式产生编号,运行一年多以后,客户最终还是反映有两笔数据编号重了。
给你一个使用触发器的样例:
SQL code

ALTER TRIGGER [dbo].[Trigger_Insert] 
   ON  [dbo].[TableA] 
   After INSERT 
AS 
BEGIN 
    declare @pkid int,@pid varchar(14),@temppid varchar(14) 
    --从Inserted表中取得主键的自动编号 
    select @pkid=pkid from Inserted 
    --获取当前日期格式为"P20081010" 
    select @pid = 'P' + Convert(varchar(8),GetDate(),112); 
    --获取最后一个PID 
    select top 1 @temppid=pid from TableA where pid like @pid+'%' order by pkid desc 
    if (@temppid is null) 
        begin 
            --如果今天没有插入过数据,则初始值为'P200810100001' 
            set @pid = @pid + '0001' 
        end 
    else 
        begin 
            --否则从最后一个日期取得编号,并末尾加上1,组成新编号 
            set @pid = @pid + right(cast(power(10,4) as varchar)+(convert(int,substring(@temppid,10,4))+1),4) 
        end
    --更新编号 
    update TableA set pid=@pid where pkid = @pkid 
END

作者: orain   发布时间: 2011-12-25

当然,你也可以在读取最大编号时就对数据加锁,一直到写入编号后解锁,但这会对性能造成一定的影响。

作者: orain   发布时间: 2011-12-25