c# - 生成唯一的随机数

标签 c# asp.net

我将学生 ID 作为随机编号输入到数据库中

  int num = r.Next(1000);
  Session["number"] = "SN" + (" ") + num.ToString();

但是有没有可能得到重复的号码?我怎样才能避免这种情况?

编辑::我有一个身份列,学生 ID 与 ID 是分开的,我将从 UI 中向数据库中输入一个随机学生 ID。

最佳答案

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

  • 您需要一个唯一而不是随机的值。两者不同。随机数重复,它们不是唯一的。唯一数字也不是随机的。例如,如果您只是从 0 开始递增数字,它将是唯一的,但这绝不是随机的。
  • 您可以使用 GUID,它是唯一的,但它是 128 位的。那是相当大的。大多数数据库只有一个计数器,每次添加项目时它们都会递增,因此 32 位通常就足够了。这将为您节省大量空间。增加计数器也比计算 GUID 的新值更快。对于往往涉及添加大量项目的数据库操作,这可能很重要。
  • 正如 Jodrell 在评论中提到的,如果您使用 GUID 或其他大字段,您还应该考虑索引的大小。对于需要更多位的列,存储和维护该索引将更加昂贵(在时间和空间上)。
  • 如果您尝试自己做某事,那么您很可能会做错。要么你的算法不是完全唯一的,它会由于不正确的同步而出现竞争条件,它会因为过度同步而导致性能下降,它会显着变大,因为这是降低碰撞风险所采取的措施,等等。在最终,数据库将可以访问您无法访问的工具;让它来处理,这样您就不必担心会搞砸什么。

关于c# - 生成唯一的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749964/

相关文章:

c# - 使用 Request.Url.AbsoluteUri.Replace 重定向

asp.net - jQuery 验证 : validate atleast one checkbox is selected from a list where names are different

c# - 在 CheckedListBox C# 中搜索项目

c# - 在 avalon edit 中更改默认行高

asp.net - 如何在 asp :textbox 中放置提示

php - 说服 IT 经理允许使用 SQL Server 而不是 Access

javascript - Window.Navigate 方法在 Firefox 和 Chrome 中不起作用

c# - 在字符 != "_"时获取最后一个字符

c# - 如何创建 .net 4.5 monomac 项目?

c# - 如何使用 linq 连接两个没有相同字段的列表?