先在数据库的存储过程写好查询代码,通过主键ID查询倒叙查询第一条数据,这是为了后续的订单号自动叠加。
存储过程代码:
--查询订单编号(最后一条)
IF(@type='DinDanBianHao_NUMBER')
BEGIN
SELECT TOP 1 RTRIM( DinDanBianHao) as Number
FROM PW_OrderForm
ORDER BY ReserveFromID DESC
END
再到服务端写好服务器代码,调用存储过程
服务器代码:
//定义操作契约(自动生成单号)
[OperationContract]
public DataSet DinDanBianHao_NUMBER()
{
//实例化对象数组
SqlParameter[] mySqlParameter =
{
//定义传递参数,以及传递参数的类型
new SqlParameter("@type",SqlDbType.NChar),
};
mySqlParameter[0].Value = "DinDanBianHao_NUMBER";
DataTable myDataTable= myDALMethod.QueryDataTable("User_OrderFormZhiJia", mySqlParameter);
DataSet myDataSet = new DataSet();
myDataSet.Tables.Add(myDataTable);
return myDataSet;
}
再到客户端创建一个类封装代码
客户端代码:
public class DinDanBianHaoNuber
{
public static object _lock = new object();
public static int count = 0;
public string GetRandom1(string asd)
{
int numder = Convert.ToInt32(asd.Substring(9));
//获取当天时间用于比较当天是否已有订单号
string strTrim = Convert.ToString(DateTime.Now.ToString("yyyyMMdd"));
string strShuju = asd.Substring(1, 8);
lock (_lock)
{//判断是否是当天日期和当天新增的订单是否大于10000
if (count < 10000 && strTrim == strShuju)
{
//将当天的订单编号值赋值给长度用于判断当天的订单编号是否大于10000
count = numder;
//自加1是为了让订单号自增
count++;
}
else
{
count = 1;
}
//拼接自驾订单号
var number = "D" + DateTime.Now.ToString("yyyyMMdd") + count.ToString("0000");
//返回订单编号
return number;
}
}
}
封装好后在页面的加载事件调用:
代码
string DinDanBianHao = (new DinDanBianHaoNuber().GetRandom1(dtnusdf));
这一种新增理论上当天的数据量到达到了9999条后会重0开始又会继续增加到9999实际上当天数据到了9999后就从0开始继续新增了当然排除删除操作,如果是重线程的角度来看只适用于单线程,如果同时新增可能会产生相同的订单号。
说明:这种方法是借鉴别人的代码再自己改动