日期:2014-05-19  浏览次数:20834 次

請教一下:C#利用日期產生流水號該怎麼寫?
各位大俠:
我想寫一個當新增一筆資料時能自動編號存進資料庫裡的程式,
而且編號需以當日新增的日期+上流水號來新增進SQL裡,
(如:06(年)   07(月)   25(日)   001(流水號)   =   060725001)10碼,
而若遇上8月1日時可以自動更為(060801001),07年1月1日也是(070101001)
希望各位ASP.NET的達人可以給予指導
也可以是YYYY+MM+DD+NNNN三位流水號和四號均可.
當我新增一筆資料時,系統會去找最大的一筆,如果當天沒有最大的一筆,則由系統日期+001,如今天的第一筆資料為:20070521001,明天的為20070522001,這樣就不會產生衝突,也不會改變系統中已經存在的流水號了.

------解决方案--------------------
--在数据库里创建一张最大号表
create table maxCount
(
tableID int identity(1,1) primary key,--自增长ID
maxCount varchar(12) not null --最大号
)
--插入一条记录
insert into maxCount values(datename(yy,getdate())+datename(mm,getdate())+datename(dd,getdate())+ '0000 ')
--创建两个存储过程
--这个存储过程用于外部调用 返回一个流水号
create proc serialNumber
@number varchar(12) output
as
exec setMaxCount --调用存储过程setMaxCount
begin transaction
declare @temp decimal
select @number=maxCount from maxCount where tableID=1
set @temp=convert(decimal,@number)+1
set @number=convert(varchar(12),@temp)
update maxCount set maxCount=@number where tableID=1
commit transaction

GO

--用与判定天数是否是第二天如果是跟新最大号表 这个存储过程外部不调用
create proc setMaxCount
as
declare @count varchar(12) ,@nowDay varchar(8),@oldDay varchar(8)
select @count=maxCount from maxCount where tableID=1
set @nowDay=(datename(yy,getdate())+datename(mm,getdate())+datename(dd,getdate()))
set @oldDay=(SUBSTRING(@count,0,5)+SUBSTRING(@count,5,2)+SUBSTRING(@count,7,2))
if (@oldDay <@nowDay)
begin
update maxCount set maxCount=datename(yy,getdate())+datename(mm,getdate())+datename(dd,getdate())+ '0000 '
where tableID=1
end


GO

C# 调用代码:
//数据访问类
public class DBManager
{
SqlConnection sqlCon;
public DBManager()
{
sqlCon=new SqlConnection( "server=(local);uid=sa;pwd=;database=HospitalFirst ");

}
/// <summary>
/// 执行有参存储过程
/// </summary>
/// <param name= "ProcName "> 存储过程名 </param>
/// <param name= "sqlParas "> 参数数组 </param>
public void ExecProcPara(string ProcName,SqlParameter[] sqlParas)
{
if(ProcName==null||ProcName==string.Empty)
return ;
try
{
if(this.sqlCon.State==ConnectionState.Closed)
this.sqlCon.Open();
SqlCommand sqlCmd = this.sqlCon.CreateCommand();
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = ProcName;

//遍历参数数组集合,将每个参数对象与sqlCmd关联
foreach(SqlParameter sqlPara in sqlParas)
{
sqlCmd.Parameters.Add(sqlPara);
}
sqlCmd.ExecuteNonQuery();

}
catch
{
return;
}
finally
{
this.sqlCon.Close();
}
}
// DAO调用
public string getNumDao()
{
dbm = new DBManager();
SqlParameter[] sqlParas = new SqlParameter[1];

//输出参数
SqlParameter sqlPara0 = new SqlParameter();
sqlPara0.ParameterName = "@number ";
sqlPara0.Direction = ParameterDirection.Output;
sqlPara0.SqlDbType = SqlDbType.VarChar;
sqlPara0.Size = 12;
sqlParas[0] = sqlPara0;
//执行
dbm.ExecProcPara( "serialNumber ",sqlParas);
string s = Convert.ToString(sqlPara0.Value);
return s;
}
返回值就是12位流水号