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

解决方案 »

  1.   

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

  2.   

    从数据库中取出当天的最大号码,如果不存在,则int n=0;如果存在,则n=最大号码+1;(注意substring得到最后四位,转成int)string code=n.ToString("D4");code=DateTime.Now.ToString("yyyy-MM-dd")+"-"+code;写入数据库
      

  3.   

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

  4.   

    参考:
    http://www.cnblogs.com/insus/archive/2011/08/21/2147645.html
      

  5.   

     if (!IsPostBack)
                {
                    System.DateTime da = System.DateTime.Now;
                    string dtime = Convert.ToString(da);
                    string stime = dtime.Substring(0, 10);
                   // t4.Text = stime;                string sql1 = "select *  from t_bill where billcode like '%" + stime + "%'";                SqlConnection conn1 = new SqlConnection(sqlconn);
                    SqlCommand cmd1 = new SqlCommand(sql1, conn1);
                    conn1.Open();
                    if (cmd1.ExecuteScalar() != null)
                    {
                        //Response.Write(cmd1.ExecuteScalar().ToString());
                        SqlDataReader dr = cmd1.ExecuteReader();                    dr.Read();
                        string bcode = Convert.ToString(dr["billcode"]).Substring(14, 4);                    Autocode(bcode);                }
                    else
                    {
                        t1.Text = "xf" + "-" + stime + "-" + "0001";
                    }
                }
      

  6.   

     protected void Autocode(string  code)
            {
                System.DateTime da = System.DateTime.Now;
                string dtime = Convert.ToString(da);
                string stime = dtime.Substring(0, 10);            int billcode = Convert.ToInt32(code) + 1;
               // Response.Write(billcode);
                string scode = Convert.ToString(billcode);
                if (scode.ToString().Length == 1)
                {
                    t1.Text = "xf" + "-" + stime + "-" + "000" + scode;
                    string code11 = t1.Text.Substring(14, 4);               // Response.Write(code);
                    //Autocode(bcode);
                }
                if (scode.ToString().Length == 2)
                {
                    t1.Text = "xf" + "-" + stime + "-" + "00" + scode;
                }
                if (scode.ToString().Length == 3)
                {
                    t1.Text = "xf" + "-" + stime + "-" + "0" + scode;
                }        }