生成唯一的随机数

cha*_*har 2 c# asp.net

我将学生ID作为randon号输入到DB中

  int num = r.Next(1000);
  Session["number"] = "SN" + (" ") + num.ToString();
Run Code Online (Sandbox Code Playgroud)

但有没有机会获得重复的数字?我怎么能避免这种情况?

编辑::我有一个标识列,学生ID与ID分开,我将从UI输入随机学生ID进入数据库.

Ser*_*rvy 7

在DB中具有仅仅是整数唯一ID的列是一项非常常见的任务.以至于我曾经使用过的每个数据库都有一个特定的列类型,函数等来处理它.它会根据您使用的任何特定数据库而有所不同,但您应该弄清楚它是什么并使用它.

  • 你需要一个独特的值,不是随机的.两者是不同的.随机数重复,它们不是唯一的.唯一数字也不是随机的.例如,如果你只是从0增加数字,它将是唯一的,但这不是随机的.
  • 您可以使用GUID,它将是唯一的,但它将是128位.那太大了.大多数数据库只有一个计数器,每次添加项目时它们都会递增,所以32位通常就足够了.这将为您节省大量空间.递增计数器也比计算GUID的新值更快.对于往往涉及添加大量项目的数据库操作,这可能很重要.
  • 正如Jodrell在评论中提到的那样,如果使用GUID或其他大字段,还应考虑索引的大小.使用需要更多位的列,存储和维护该索引将更加昂贵(在时间和空间上).
  • 如果你试图自己做一些事情,你很可能会做错事.要么你的算法不是完全唯一的,它会因同步不当而产生竞争条件,由于过度同步会导致性能下降,它会大得多,因为它是减少碰撞风险所需要的,等等.当天结束时,数据库可以访问您不使用的工具; 让它照顾它,所以你不必担心你会搞砸什么.