我有一个网页Default.aspx,为每个新用户生成一个id,然后在按钮上点击Default.aspx后,id将被提交到数据库......
如果其他用户同时输入的ID也是相同的......直到他们按下default.aspx上的按钮
如何摆脱这个问题...这样......每个用户都会被分配给唯一的ID ...
我使用读写代码生成唯一ID ..
答案 0 :(得分:1)
答案 1 :(得分:1)
三个选项
使用GUID:Guid.NewGuid()
将生成唯一的GUID。当然,GUID比整数长得多。
使用intelocked操作递增共享计数器。 Interlocked.Increment
是线程安全的。这仅在所有请求发生在同一AppDomain中时才有效:在刷新代码时,进程循环将创建新的AppDomain并重新开始计数。
在数据库中使用IDENTITY列。数据库旨在处理此问题,在插入新行的请求中,使用SCOPE_IDENTITY
选择要在内存数据中更新的标识值(ORM应该为您处理此问题)。 (这是SQL Server,其他数据库具有相同的功能。)
在那里#3几乎肯定是最好的。
答案 2 :(得分:1)
你可以生成一个Guid:
Guid.NewGuid()
或者您可以让数据库在插入时为您生成它。一种方法是通过序列。请参阅维基百科文章Surrogate Keys
来自文章:
数据库中的代理键是建模世界中的实体或数据库中的对象的唯一标识符。代理键不是从应用程序数据派生的。
序列/自动递增列选项将更简单,并且在手动查询数据库时更容易记住(在调试期间),但我工作的DBA表示,通过切换到Guids,他的性能提高了20%。他使用的是Oracle,他的数据库很庞大,但是:)
答案 3 :(得分:0)
我使用实用程序静态方法生成id,基本上使用完整的日期时间(包括秒)并生成一个随机数的3或4个字符并返回整个事物,然后就可以将它保存到数据库中。