You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET预订系统中实现BYYMMDD格式唯一自动预订ID生成功能

实现思路
  • 首先判断当前操作是新增还是编辑:如果numRECID.Value > 0说明是编辑已有记录,无需修改预订ID,直接返回True即可
  • 若为新增记录,先提取当前选择的预订日期dtBKGDT.Value,按YYMMDD格式生成日期字符串,拼接前缀B得到ID前半段,例如B240520
  • 去INBKG_TBL表查询所有预订日期和当前选择日期一致的记录,提取这些记录的INBKG_BKGID中的最大序号值:
    • 若当天没有记录,序号默认从01开始
    • 若有记录,最大序号加1后格式化为两位字符串,不足两位前面补0
  • 拼接前缀和序号得到完整的预订ID,赋值给txtBKGID.Text,返回True
  • 整个过程加异常捕获,出错时返回False并提示错误
AutoBKGID 函数实现代码
Private Function AutoBKGID() As Boolean
    Try
        ' 编辑状态直接返回,不修改原有ID
        If numRECID.Value > 0 Then
            Return True
        End If
        
        ' 生成ID前缀:B + YYMMDD
        Dim dtCur As Date = dtBKGDT.Value
        Dim strPrefix As String = "B" & dtCur.ToString("yyMMdd")
        Dim intMaxSeq As Integer = 0
        
        ' 查询当日最大序号
        Dim strSQL As String = "SELECT RIGHT(INBKG_BKGID, 2) AS MAXSEQ FROM INBKG_TBL " & _
                               "WHERE INBKG_BKGDT = '" & gfSQLDate(dtCur) & "' " & _
                               "ORDER BY INBKG_BKGID DESC"
        Dim dt As DataTable = ExecProc(strSQL)
        
        ' 有记录则取最大序号+1,否则默认01
        If dt.Rows.Count > 0 Then
            Integer.TryParse(dt.Rows(0)("MAXSEQ").ToString(), intMaxSeq)
        End If
        intMaxSeq += 1
        
        ' 拼接完整ID赋值给输入框
        txtBKGID.Text = strPrefix & "-" & intMaxSeq.ToString("00")
        
        Return True
    Catch ex As Exception
        MessageBox.Show("自动生成预订ID失败:" & ex.Message, "AutoBKGID", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        Return False
    End Try
End Function
补充说明
  • 如果业务单日预订量可能超过99条,可以把序号的位数调整为3位,把代码里的ToString("00")改成ToString("000"),同时对应调整INBKG_BKGID的字段长度即可
  • 原有代码的SQL拼接写法存在SQL注入风险,建议后续优化为参数化查询,提升安全性
  • 若存在多用户同时新增的并发场景,建议在插入记录时再加一次ID唯一性校验,避免出现重复ID的问题

内容的提问来源于stack exchange,提问作者StillGotAlotToLearn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:03