首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

自动生成水流编号!挺难的!

2013-09-05 
自动生成流水编号!!!挺难的!!!大家帮我个忙呗!!!自动生成流水编号!这个问题我很头疼!不好实现!!求代码》》》

自动生成流水编号!!!挺难的!!!
大家帮我个忙呗!!!自动生成流水编号!这个问题我很头疼!不好实现!!求代码》》》
问题是:
当选择类别A中的1, 类别B中的01时,自动生成的编号为101001  当下次再同样选择类别A 和B时,自动生成101002, 101003,101004...    
当选择类别A中的1,类别B中的02时,自动生成的编号为102001  当下次再同样选择类别A 和B时,自动生成102002, 102003,102004... 
当选择类别A中的2,类别B中的01时,自动生成的编号为201001  当下次再同样选择类别A 和B时,自动生成201002, 201003,201004... 
当选择类别A中的2,类别B中的02时,自动生成的编号为202001  当下次再同样选择类别A 和B时,自动生成202002, 202003,202004... 
c# ?流水编号
[解决办法]
101001,1和01为程序中拼接字符串的形式获得,后面的001是个字符串,查询数据库表的max(id)获得(每次生成的流水号要保存到数据库),然后string.concat合并起来。
[解决办法]
這個不是很簡單嗎?自己寫個取得編號的方法
1.你可以直接根據條件去取他的最大MAX(NO)
2.你也可以在每次保存的時候把NO保存在一個表中,下次直接加一就是了
類別字段,序號,
Bill_Type,Number
A1B01     101001
A1B02     102001
.....
下次你只要在此直基礎上加1,再更新此表

[解决办法]
不难,用string.Format自己拼接就可以。
[解决办法]
这不就是直接拼一下么。。。 int.parse("1"+"02"+"00") 不就是10200
[解决办法]
懒人,技术一路没有捷径,伸手党必将灭亡
[解决办法]
假设 数据库 存在表 TB_SerialNum
结构:
主键  类型       流水号
 2     typeA     101002
 3     typeB     102002

c# : 
string 流水号=DBHelperSQL.ExecuteScalar("select Max(流水号) FROM TB_SerialNum WHERE 类型='typeA'").ToString();
if(string.isnullOrempty(流水号))
{
流水号="101001";
}
string 新流水号=(int.Parse(流水号)+1).ToString();
    DBHelperSQL.ExecuteSql("INSERT INTO TB_SerialNum VALUES('typeA','"+新流水号+"' )");//插入 新流水号到  TB_SerialNum 
[解决办法]
下班回家喽  慢慢研究吧


create table 流水表(编号 nvarchar(10))


insert into 流水表 values ('102001')


IF EXISTS(SELECT * FROMsys.objects o WHEREo.object_id = OBJECT_ID('dbo.abc'))
DROP FUNCTION dbo.abc
GO
CREATE FUNCTION dbo.abc
(
@TYPEANVARCHAR(10),
@TYPEBNVARCHAR(10)
)
RETURNS VARCHAR(15)
BEGIN
DECLARE @IDVARCHAR(15)

IFEXISTS(
SELECT*
FROM流水表 m
WHERE
@TYPEA+@TYPEB = SUBSTRING(m.编号,1,3)
)
BEGIN
SET@ID = (SELECT MAX(m.编号) FROM 流水表 m WHERE @TYPEA+@TYPEB = SUBSTRING(m.编号,1,3))
SET@ID = RIGHT(@ID, 3) + 1
SET@ID = 1000 + @ID
SET@ID = RIGHT(@ID, 3)
SET@ID = @TYPEA+@TYPEB + CAST(@ID AS CHAR(3))
END
ELSE
SET @ID = @TYPEA+@TYPEB + '001'
RETURN @ID
END

DECLARE @IDVARCHAR(15)
set @ID=dbo.abc('1','02')
select @ID

/*
102002
*/


[解决办法]
       string t1 ="101";
        string strsql = "select * from test where  流水编号 like '%" + t1 + "%' ";
        dv = Das.CreateDataView(strsql);
        int tt = dv.Table.Rows.Count;
        int temp = 0;
        if (tt > 1)
        {
            for (int i = 0; i < tt; i++)
            {
                if (i == 0)
                {
                    string tt1 = Convert.ToString(dv.Table.Rows[i][0]);
                    tt1 = tt1.Substring(3, 4);
                    temp = Convert.ToInt32(tt1);
                }


                else
                {
                    string tt1 = Convert.ToString(dv.Table.Rows[i][0]);
                    tt1 = tt1.Substring(3, 4);
                    int temp1 = Convert.ToInt32(tt1);
                    if (temp1 > temp)
                    {
                        temp = temp1;
                    }

                }
            }

            string stemp = Convert.ToString(temp + 1).Trim();
            int st = stemp.Length;
            if (st == 1)
            {
                stemp = "000" + stemp;
            }
            else if (st == 2)
            {
                stemp = "00" + stemp;
            }
            else if (st == 3)
            {
                stemp = "0" + stemp;
            }
            else if (st == 4)


            {
                stemp = stemp;
            }
            this.Label3.Text = t1 + Convert.ToString(stemp).Trim();
        }
        else if (tt == 1)
        {
            for (int i = 0; i < tt; i++)
            {

                string tt1 = Convert.ToString(dv.Table.Rows[i][0]);
                tt1 = tt1.Substring(3, 4);
                temp = Convert.ToInt32(tt1) + 1;

            }

            string stemp = Convert.ToString(temp).Trim();
            int st = stemp.Length;
            if (st == 1)
            {
                stemp = "000" + stemp;
            }
            else if (st == 2)
            {
                stemp = "00" + stemp;
            }
            else if (st == 3)
            {
                stemp = "0" + stemp;
            }
            else if (st == 4)
            {


                stemp = stemp;
            }
            流水编号 = t1 + Convert.ToString(stemp).Trim();
        }
        else
        {
           流水编号 = t1 + "0001";
        }
[解决办法]
补充一下
将A类的Code+B类的Code值+max(流水号) 这样子就可以生成了。 

此处如果设置了默认值的话就不用这样子了,只须 以max(流水号)+1即可(如果max(流水号不存在,就要设定初始的值的形式如 1010001))
[解决办法]
如果要解决后续尾号数值问题
如:101999的时候,再添加的话会是102000
将流水编号另存一个字段吧

A类Code +B类Code +流水尾号
1                01            999

【流水编号生成方式】 A类Code+B类Code+(max(流水尾号) +1)
101999=>1011000

[解决办法]
既然有1000多个,干嘛不多加一位顺序号呢。弄个6位。不就解决了。

热点排行