日期:2014-05-18  浏览次数:20364 次

大家是如何保存自动生成编码时用的日期和编号???
请问自动生成编码好方法,我想要的编码规则是需要时间 "070920 "+每天自动增长的编号 "001 ".

相信很多人都做过这个功能,就是先判断当天的时间与存在的时间是否是同一天,如果不同,则将自动增长的编号清零;如果相同,则编号增加1。

我现在想问的是,如何保存存在的日期和编号才使方法最简洁,我觉得用数据库或文本储存似乎太费资源,而且提取也麻烦。我想用类的静态字段保存,但是怕丢失数据。

请问大家是如何做的???

------解决方案--------------------
public string GetTradeNo() //生成交易号码
{
ReadWriteXML servername = new ReadWriteXML();//读取XML文件中的数据库配置
string connStr = servername.GetDataBaseSaver();//根据配置生成链接字符串

string sYear = DateTime.Now.Year.ToString();//取年份
string sMonth = DateTime.Now.Month.ToString();//取月份
string sDay = DateTime.Now.Day.ToString();//取日期
if (sMonth.Length == 1) { sMonth = "0" + sMonth; }//小于10的月份变双位
if (sDay.Length == 1) { sDay = "0" + sDay; }//小于10 的日期变双位
string sTemp = sYear + sMonth + sDay + "0001";//生成当天初始的交易号
string TradeNoSQL = "SELECT TradeNo FROM sales order by TradeNo DESC";//查询数据库中最大的交易号的SQL语句
MySqlConnection TradeNoconn = new MySqlConnection(connStr);//连接数据库
TradeNoconn.Open();//打开数据库
MySqlCommand TradeNocmd = new MySqlCommand(TradeNoSQL,TradeNoconn);//执行查询
MySqlDataReader reader =TradeNocmd.ExecuteReader();//读取数据
if (reader.Read()&(sTemp.Substring(1, 8) == reader.GetString(0).Substring(1, 8)))//如果取得数据并且sTemp的前八位等于数据库中取得的数据的前八位
{
long dd = Convert.ToInt64(sTemp);
long cc = Convert.ToInt64(reader.GetString(0));
dd = cc + 1;//sTemp等于取得的交易号+1,否则sTemp等于初始生成的号码
sTemp = dd.ToString();
}
TradeNoconn.Close();//关闭连接
return sTemp;//返回sTemp



我不是什么程序员,只是爱好而已,我的观点不一定正确啊,代码也不一定精简,
个人觉得综合考虑还是用数据库的好,上面的代码是我在给我爱人写的一个winform程序中用到的代码,mysql数据库
生成的交易号里面就有时间的标记,这要在统计的时候也是很好处理的