當點擊一個BUTTON,就自動生成一個截取當時時間的訂單號,并存儲在數據庫中怎么寫啊???訂單號例如“20081241128A0001”A前面是年月日和時間

解决方案 »

  1.   

    datetime dt=datetime.today;
    dt.year.tostring+dt.month.tostring("00")+dt.day.tostring("00")
      

  2.   

    引用下ZJCXC的生成编号法 --编号表
    CREATE TABLE tb_NO(
    Name char(2) NOT NULL,                 --编号种类的名称
    Days int NOT NULL,                     --保存的是该种编号那一天的当前编号
    Head nvarchar(10) NOT NULL DEFAULT '', --编号的前缀
    CurrentNo int NOT NULL DEFAULT 0,      --当前编号
    BHLen int NOT NULL DEFAULT 6,          --编号数字部分长度
    YearMoth int NOT NULL                  --上次生成编号的年月,格式YYYYMM
    DEFAULT CONVERT(CHAR(6),GETDATE(),112),
    DESCRIPTION NVARCHAR(50),              --编号种类说明
    TableName sysname NOT NULL,            --当前编号对应的原始表名
    KeyFieldName sysname NOT NULL,         --当前编号对应的原始表编号字段名
    PRIMARY KEY(Name,Days))--这里以一种单据的7天的资料来做测试
    INSERT tb_NO SELECT 'CG',1,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    UNION  ALL   SELECT 'CG',2,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    UNION  ALL   SELECT 'CG',3,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    UNION  ALL   SELECT 'CG',4,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    UNION  ALL   SELECT 'CG',5,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    UNION  ALL   SELECT 'CG',6,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    UNION  ALL   SELECT 'CG',7,'CG',0,4,200501,N'采购订单',N'tb',N'bh'
    GO--获取新编号的存储过程
    CREATE PROC p_NextBH
    @Name char(2),            --编号种类
    @Date datetime=NULL,     --要获取的当前日期,不指定则为系统当前日期
    @BH nvarchar(20) OUTPUT --新编号
    AS
    IF @Date IS NULL SET @Date=GETDATE()
    BEGIN TRAN
    --从编号表中获取新编号
    UPDATE tb_NO SET 
    @BH=Head
    +CONVERT(CHAR(6),@Date,12)
    +RIGHT(POWER(10,BHLen)
    +CASE 
    WHEN YearMoth=CONVERT(char(6),@Date,112)
    THEN CurrentNo+1
    ELSE 1 END
    ,BHLen),
    CurrentNo=CASE 
    WHEN YearMoth=CONVERT(char(6),@Date,112)
    THEN CurrentNo+1
    ELSE 1 END,
    YearMoth=CONVERT(char(6),@Date,112)
    WHERE Name=@Name 
    AND Days=DAY(@Date)
    AND YearMoth<=CONVERT(char(6),@Date,112) --如果要获取的编号在编号表中已经过期,则直接从原始表中取编号
    IF @@ROWCOUNT=0
    BEGIN
    DECLARE @s nvarchar(4000)
    SELECT @s=N'SELECT @BH='
    +QUOTENAME(Head+CONVERT(CHAR(6),@Date,12),N'''')
    +N'+RIGHT('+CAST(POWER(10,BHLen)+1 as varchar)
    +N'+ISNULL(RIGHT(MAX('+QUOTENAME(KeyFieldName)
    +N'),'+CAST(BHLen as varchar)
    +N'),0),'+CAST(BHLen as varchar)
    +N') FROM '+QUOTENAME(TableName)
    +N' WITH(XLOCK,PAGLOCK) WHERE '
    +QUOTENAME(KeyFieldName)
    +N' like '+QUOTENAME(Head+CONVERT(CHAR(6),@Date,12)+N'%',N'''')
    FROM tb_NO
    WHERE Name=@Name 
    AND Days=DAY(@Date)
    AND YearMoth>CONVERT(char(6),@Date,112)
    IF @@ROWCOUNT>0
    EXEC sp_executesql @s,N'@BH nvarchar(20) OUTPUT',@BH OUTPUT
    END
    COMMIT TRAN
    GOCREATE TABLE tb(BH char(12))
    --获取 CG 的新编号
    DECLARE @bh char(12)
    EXEC p_NextBH 'CG','2005-1-1',@bh OUT
    SELECT @bh
    --结果: CG0501010001EXEC p_NextBH 'CG','2005-1-1',@bh OUT
    SELECT @bh
    --结果: CG0501010002EXEC p_NextBH 'CG','2005-1-2',@bh OUT
    SELECT @bh
    --结果: CG0501020001EXEC p_NextBH 'CG','2005-2-2',@bh OUT
    SELECT @bh
    --结果: CG0402020001EXEC p_NextBH 'CG','2004-2-2',@bh OUT
    SELECT @bh
    --结果: CG0402020001
    GO
      

  3.   


    StringBuilder sb = new StringBuilder();
    sb.Append(DateTime.Now.ToString("yyyyMMddhhmm"));//时间前缀
    sb.Append("A");//字符A
    //获取数据库中目前最大的存单号
    SqlCommand com = new SqlCommand("Select max(id) From [Table]", conn);
    ……
    //读出数来再加1
    MessageBox.Show(sb.ToString());
      

  4.   

    添加时找出数据库上次添加的记录
    如果没有就直接加你的:20081241128A0001
    如果有就用取出来,用SubString截取日期部分,与当前的日期比较
    如果日期一样:
    则截取取出来号码的后四位,即你的(0001),然后+1
    最后用日期+你的指码字符+已经加上1的号码
    如果日期不一样:
    则又从当前日期+你的指码字符+00001开始
      

  5.   


            private static string set调用我就自动生成编号()
            {
                strSql = "select max(编号) from 表名 where 编号 like 'A%' ";
                string strID = //将查询出来的编号赋值到这里 楼主自己写
                if (strID == "")
                {
                    strID = "A00001";
                }
                else
                {
                    strID = jia(strID);
                }
                return strID;
            } public static string jia(string str)
    {
    int MyLong=0;
    int NumStart=0;
    int NumLong=0;
    string NumStr;
    str = str.Trim();
    MyLong = str.Length;
    if(MyLong==0)
    {
    return "";
    }
    int j=0;
    for(int i=MyLong - 1;i>=1;i--)
    {
    if((str.Substring(i-1,1)=="0" || 
                                       (clsC.Cint(str.Substring(i-1,1))>=1 && 
                                       clsC.Cint(str.Substring(i-1,1))<=9 ))==false)
    {
    j=i;
    break;
    }
    }
    NumStart = j + 1;
    NumStr=(int(str.Substring(NumStart-1)) + 1 ).ToString();
    NumLong = MyLong - NumStart + 1;
    if(NumLong >= NumStr.ToString().Length)
    {
    return str.Substring(1-1, NumStart - 1) + copysize(NumLong-NumStr.ToString().Length,"0") + NumStr;
    }
    else
    {
    return "error";
    }
    } public static string copysize(int shuliang,string zifu)
    {
    string str="";
    for(int i=1;i<=shuliang;i++)
    {
    str=str+zifu;
    }
    return str;
    }
      

  6.   

    晕,知道怎么搞了,hh改成HH就行了
      

  7.   


         public static string GetSerialNumber(int i, int number)
            {
                DateTime dt = DateTime.Now;
                long ticks = dt.Ticks / 10000000;
                string a = ticks.ToString() + i.ToString().PadLeft(number.ToString().Length, char.Parse("0"));
                return a;
            }调用
    for(int i=0;i<10;i++)
    {
      Console.WriteLine(GetSerialNumber(i,10));
    }
    会生成......01
    ......02这样的号码,不重复