首页 新闻 会员 周边 捐助

c# 求一递增ID

1
悬赏园豆:5 [待解决问题]

如guid,但必须保证可以排序,如

1000

1001

1002

1003

除了利用系统时间生成这种方法外的其它解决方法

paaple的主页 paaple | 初学一级 | 园豆:15
提问于:2010-11-15 12:40
< >
分享
所有回答(5)
0

能保证程序不会退出的话

public statis class Increment {

  private static readonly object locker = new object();

  private static int id = 0;

  public static int Get() {

    lock(locker) {

      id++;

      return id;

    }

  }

}

Gray Zhang | 园豆:17610 (专家六级) | 2010-11-15 13:00
0

在oracle数据库中创建一个序列SEQ_MODLENAME_ID,它的increment为100,每次读取序列NEXTVAL后保存到全局变量K,如楼上说的加锁进行递增读取,如果值增加到K%100==0了则从数据库中读取NEXTVAL更新K,系统挂了重启后读取的也是序列的NEXTVAL,不会重复

wgz | 园豆:1254 (小虾三级) | 2010-11-15 15:19
0

自增长不就可以么?

顾晓北 | 园豆:10898 (专家六级) | 2010-11-16 13:05
0

楼上说的自增长是一种办法,它但有一定的局限性

在实际过程中,我们往往可以在数据库中取得最大的ID,然后,在程序中进行一定的处理后,再进行一定的操作,仅供参考!

Tester Chen | 园豆:1690 (小虾三级) | 2010-11-17 15:27
0

用序列自动增长是很方便的,有个缺点是如果删除了其中一条,它会继续增长,那一个id会空,因为序列是与本表无关的,如果按quest chen说的,跟序列一样,如果想把让每个ID充分利用,要先遍历整个ID,哪一行空,当前数据插入哪一行。如果不空,插入最后一行。

贪心狸猫 | 园豆:872 (小虾三级) | 2010-11-18 19:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册