我将学生ID作为randon号码输入到数据库
中 int num = r.Next(1000);
Session["number"] = "SN" + (" ") + num.ToString();
但是有没有机会获得重复的数字?我怎么能避免这个?
编辑::我有一个标识列,学生ID与ID分开,我将从UI输入一个随机的学生ID进入数据库。
答案 0 :(得分:7)
在DB中创建一个仅仅是整数唯一ID的列是一项非常的常见任务。以至于我曾经使用过的每个数据库都有一个特定的列类型,函数等来处理它。它会根据您使用的任何特定数据库而有所不同,但您应该弄清楚它是什么并使用它。
答案 1 :(得分:3)
你可以使用Guid而不是随机int,它们将始终是唯一的
没有办法保证int是唯一的,除非你检查每一个已经存在的东西,即便如此 - 就像评论所说,当你传递1000个ids时,你是保证重复的
编辑:
我提到我认为Guid在这里是最好的,因为这个问题,首先索引表格不会花费很长时间 - 假设由于int的大小,将会有不到1000名学生,在一个少于1000行的表中,128位是很好的。
Guid是一件好事,即使它们并不总是最有效的方式
在c#中创建一个独特的Guid有一个好处,你可以继续使用并显示该ID - 就像在问题中一样,没有再去Db去找出分配给学生的唯一ID
答案 2 :(得分:3)
当然,您很可能会获得重复的号码。接下来只是给你一个0到1000之间的数字,但不能保证这个数字不会是Next过去返回的那个数字。
如果您尝试使用唯一值,请查看可能使用Guids而不是整数,或者使用不断增加的整数值而不是任意随机数。这里是Guid的参考页面 http://msdn.microsoft.com/en-us/library/system.guid.aspx
答案 3 :(得分:2)
是的,你会得到重复的。如果您想要一个真正独特的项目,您将需要使用Guid。如果您仍想使用数字,则需要跟踪已使用的数字,类似于数据库中的标识列。
答案 4 :(得分:2)
答案 5 :(得分:2)
您可以尝试使用Guid
生成ID:
Session["number"] = "SN" + (" ") + Guid.NewGuid().ToString();
它会大大降低获得重复ID的机会。
答案 6 :(得分:1)
如果你使用随机数,那么没有办法避免它。总会有碰撞的可能性。
我认为您可能正在寻找的是Identity列,或者与您的数据库服务器等效的列。
答案 7 :(得分:1)
在LINQ to SQL中,可以像这样设置行:
[Column ( IsPrimaryKey = true, IsDbGenerated = true )]
public int ID { get; set; }
我不知道它是否对你有帮助,但也许这是一个很好的暗示...
答案 8 :(得分:-1)
是的,当然有可能。
快速解决方案:
首先检查它是否是重复的数字,然后再试一次,直到它不再是重复的数字。