在C#中通过LAN运行的系统上为客户端生成唯一ID

时间:2013-01-08 07:57:38

标签: c# .net primary-key

我有一个通过网络运行的简单客户注册系统。该系统应该生成唯一的三位ID(主键),其中当前年份连接在一起(例如001-2013)。但是,我遇到的问题是,当来自不同计算机的两个用户(通过LAN)尝试注册不同的客户端时,会生成相同的主键。

如果用户在已生成ID后取消注册,该怎么办?我要为另一个客户重用该ID。我已经读过静态变量,但它没有解决我的问题。我非常感谢你的想法。

2 个答案:

答案 0 :(得分:2)

难以实现唯一ID和顺序ID。要完全实现它,你必须序列化提交客户信息的提交,这样才能在实际存储数据时生成ID,否则在提交期间发生错误时你最终会出现漏洞。

如果您不需要严格的序号 - 给每个系统ID(1-22,23-44,...)的范围是常用的方法。如果您需要使用尽可能多的ID,则可以提供要使用的ID列表({1,3,233,234},{235,236,237})而不是范围。

答案 1 :(得分:2)

问题:

  1. 已创建新项目-001,但尚未保存
  2. 已创建新项目-002,但尚未保存
  3. 项目-001被取消
  4. 如何处理ID -001?

    最简单的解决方案是在明确存储项目之前不要分配ID。

    另一种方法是,在最终保存项目时,您会查找第一个免费ID。如果步骤2(#2)中的项目在步骤1之前保存,则#2获得ID -001。当#1然后被保存时,保存逻辑会看到其声明的ID(-001)正在使用中,因此它将分配-002。所以ID被重新分配。

    最后,您可以在创建新项目时找到下一个免费ID。在上面描述的三个步骤中,这意味着你最初有一个-001应该是的差距。如果您现在创建一个新项目,您的代码将看到-001未使用,并将其分配给新项目。

    但是,这完全取决于你没有指定的要求,现在-001是在-002之后的时间创建的,我不知道是否允许这样做。此外,在任何特定时刻,您的编号中的项目已被取消。如果它在报告期结束时发生,则会导致错误(-033,-034,-036)。

    您可能还想包含一个自动递增的主键,而不是此发票号或其他任何内容。