当前位置: 代码迷 >> J2EE >> 多客户端版软件中 当多个客户端与此同时开户时,怎样避免生成的用户编号重复
  详细解决方案

多客户端版软件中 当多个客户端与此同时开户时,怎样避免生成的用户编号重复

热度:276   发布时间:2016-04-17 23:34:59.0
多客户端版软件中 当多个客户端同时开户时,怎样避免生成的用户编号重复
多客户端版软件中  当多个客户端同时开户时,怎样避免生成的用户编号重复
以下是客户端新开户时,生成新的用户编号的代码,大家有什么建议。
    Dim RsJL As New AdoDB.Recordset,sql as string 

   sql = " select max(用户编号) as  最大编号  from yhxx   "
   RsJL.Open sql, Conn, adOpenKeyset, adLockPessimistic
   
   If RsJL.RecordCount = 0 Then
            BH = 1  
  Else
           If IsNull(RsJL.Fields("最大编号")) = True Then
                  BH = 1
           Else
                 BH = RsJL.Fields("最大编号") + 1
           End If
   End If
如果三个客户端软件同时开户,同时通过以上代码得到了一个编号为1,那保存后岂不是有3个编号为1的用户?

怎么办呢,谢谢大家?  

------解决思路----------------------
这不是最明显的同步用例嘛
------解决思路----------------------
大部分数据库都有自动生成ID的功能,这样插入数据库一行时就不需要指定ID列了,而且保证不会重复。
如果一定要自己生成,可以用GUID来表示ID,也可以保证不会重复。
如果一定要用整数,可以在操作时锁定表。
------解决思路----------------------
把数据库的用户编号列设置成“自动编号”,在插入数据库记录时 INSERT INTO XX表(用户编号,xx...) values (...)改为INSERT INTO XX表(xx...) values (...),数据库会自动给用户编号赋值。