在PPC上用时间做唯一编号遇到的问题及其解决方法

  在 .NET Compact Framework 1.0 下,当你用 DateTime.Now.Millisecond 获得当前时间的毫秒部分时,你会发现它的值始终为0,也就是说,我们没有办法获取到时间的毫秒值。
  这样就引发了一个问题,我们在开发基于 SQL Server CE 的数据库应用时,如果你想通过获取当前时间的值来生成表的主键值,产生的主键值重复的概率就很高了,不过我们可以通过下面的代码来生成唯一的主键值。

 1  ///   <summary>
 2  ///  在 Pocket PC 上产生唯一编号的类。
 3  ///   </summary>
 4  public   class  RecordIdMaker
 5  {
 6       ///   <summary>
 7       ///  上次产生编号时获取到的时间。
 8       ///   </summary>
 9       private   static  DateTime lastTime  =  DateTime.MinValue;
10 
11       ///   <summary>
12       ///  上次产生编号时计算出的伪毫秒值。
13       ///   </summary>
14       private   static   int  lastMillisecond  =   0 ;
15 
16       ///   <summary>
17       ///  产生时间样式的唯一编号。
18       ///   </summary>
19       public   static   string  NewID()
20      {
21           string  newId;
22 
23          DateTime timeNow  =  DateTime.Now;
24           if  (lastTime  ==  timeNow)
25          {
26              lastMillisecond  ++ ;
27          }
28           else
29          {
30              lastMillisecond  =   0 ;
31          }
32 
33           //  用当前的时间来产生一个新的编号
34          newId  =  timeNow.ToString( " yyyyMMddHHmmss " +  lastMillisecond.ToString( " 000 " );
35 
36          lastTime  =  timeNow;
37 
38           return  newId;
39      }
40  }

  以上方法只能保证产生的主键值在本地 PPC 上的 SQL Server CE 数据库中是唯一的。如果你的 PPC 程序只是一个采集数据的前端程序,那你就要考虑到可能有多台 PPC 采集的数据的主键相同。如果你确实遇到了这样的需求,那么最好就在生成的主键值后面加上其他字符来减少重复的概率,如:登陆用户的编号,PPC 设备的硬件编号等。这样才能尽量避免存在两个相同的主键值。
  本文介绍的方法适用于分布式应用系统的情况,对于单机版并且不需要与 SQL Server 进行数据同步的 PPC 应用程序,可以用 Identity 列来保证主键值的唯一性。

   示例源码

  以上是我这段时间开发总结的经验,如果有不对的地方,希望大家指正!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值