vb.net - 生成带前缀的自动 ID
问题描述
我正在为员工建立一个数据库,我需要增加员工 ID 并使用“US0001”之类的前缀
我尝试了一个提取最后两位数字并在其上加 1 以获得下一个员工 ID 的代码。但在第十一条记录中,它停止并说不能创建重复记录。
'retrieving the user_id and adding a number to it.
Dim dr As OleDbDataReader
'Dim da As OleDbDataAdapter
Dim intCount As Int16 = 0
'cn.Open()
Dim cmddr As New OleDbCommand
cmddr.CommandText = "SELECT user_id FROM tblusers " & _
"WHERE user_id=(SELECT MAX(user_id) FROM tblusers)"
cmddr.Connection = cn
dr = cmddr.ExecuteReader
dr.Read()
If dr.HasRows = True Then
Dim str As String
str = dr.Item("user_id")
Dim lst2 As Integer
lst2 = str.Substring(str.Length - 2)
txt_user_id.Text = "U0" & lst2 + 1
Else
txt_user_id.Text = "U01"
End If
dr.Close()
'cn.Close()
我希望使用前缀生成员工 ID,并且不形成重复
解决方案
首先,您可以将 SQL 语句更改为:
select max(user_id) as max_id from tblusers
子句中不需要子查询where
。
当然,更改以下相应的行:
str = dr.Item("user_id")
至:
str = dr.Item("max_id")
其次,请注意您的代码逻辑将导致以下编号顺序:
U01
U02
U03
...
U09
U010
U011
...
这意味着当序列达到第十条记录时,max(user_id)
将一直返回U09
,直到序列达到U090
。
为了解决这个问题,您需要用前导零填充您的用户 ID,例如:
If dr.HasRows Then
txt_user_id.Text = "US" & Right("000" & (Mid(dr.Item("max_id"), 3) + 1), 4)
Else
txt_user_id.Text = "US0001"
End If
推荐阅读
- typescript - 在 Typescript 中传递特定参数时获取函数的返回类型
- android - 来自 lib 的 typealias:未解析的参考
- http - 想用记录的数据测试服务器
- mysql - 在 docker-compose 中正确使用 mysql 命令?
- r - 在 huxtable::huxreg() 中使用自定义的 `glance` 方法
- java - java.library.path 中没有 mssql-jdbc_auth-8.4.0.x64 | 替代手动将其复制到 java home / bin
- typescript - 如何使用 ES6 导入/导出语法解决 TS 循环引用问题但仍保留推断的静态类型?
- ios - 如何为 CallKit 来电 UI 设置超时
- mysql - MySQL 触发器总和 Varchar
- solr - Solr 搜索 - 价格范围根据每个产品的一组产品的 min_price 计数