微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动生成 ID 号 VB.Net 不工作 [Access DB]

如何解决自动生成 ID 号 VB.Net 不工作 [Access DB]

我一直在浏览互联网(也在这里),我找到了一个可能对我有用的代码。但是,它不会增加,我不知道还有什么问题。这是代码,请帮我解决这个问题:


Private Function GenID() As String
        Dim dr As OleDbDataReader
        Dim com As OleDbCommand
        Dim value As String = "2021000"

        Try
            con.open()
            com = New OleDbCommand("SELECT MAX(studno) FROM record",con)
            dr = com.ExecuteReader()
            If dr.HasRows Then
                dr.Read()
                value = dr.Item("studno")
            End If

            value += 1

            If value <= 9 Then                'Value is between 0 and 10
                value = "202100" & value
            ElseIf value <= 99 Then        'Value is between 9 and 100
                value = "20210" & value
            ElseIf value <= 999 Then        'Value is between 999 and 1000
                value = "2021" & value
            End If

        Catch ex As Exception
            MsgBox(ex.Message)

        End Try

        Return value
    End Function

    Private Sub addRecords_Load(sender As Object,e As EventArgs) Handles MyBase.Load
        studno.Text = GenID()
    End Sub

解决方法

您只是检索单个数据,因此 DataReader 不是必需的。 使用 ExecuteScalar 返回结果集中第一行的第一列。它返回一个 Object,因此它需要 CInt

您需要注意数据类型。 StringInteger 是两种不同的类型。一个不能在没有转换的情况下分配给另一个。您不能用 String 进行算术运算。我创建了两个不同的变量。一种用于 Integervalue,一种用于 StringStrValue。您可以使用 IntegerString 连接到 &。 & 号告诉编译器对 .ToString 变量 Integer 调用 value

我已经演示了 Using...End Using 的使用,它确保您的数据库对象被关闭和释放。 Using 第一行末尾的逗号表示下一行包含在 Using 中。在这种情况下,命令。

如果您所做的只是在 Catch 中显示一个消息框,那么请在用户界面代码中进行。如果 Function 产生异常,您将不想显示结果。因此,Return 语句退出 Sub。只有在我们成功完成 Try...End Try 之后,我们才将 NewID 分配给文本框。

Private ConStr As String = "Your connection string"
Private Function GenID() As String
    Dim value As Integer
    Using con As New OleDbConnection(ConStr),com = New OleDbCommand("SELECT MAX(studno) FROM record",con)
        con.Open()
        value = CInt(com.ExecuteScalar)
    End Using
    value += 1
    Dim StrValue As String
    If value <= 9 Then                'Value is between 0 and 10
        StrValue = "202100" & value
    ElseIf value <= 99 Then        'Value is between 9 and 100
        StrValue = "20210" & value
    ElseIf value <= 999 Then        'Value is between 999 and 1000
        StrValue = "2021" & value
    Else
        StrValue = "0"
    End If
    Return StrValue
End Function

Private Sub addRecords_Load(sender As Object,e As EventArgs) Handles MyBase.Load
    Dim NewID As String = ""
    Try
        NewID = GenID()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
        Return
    End Try
    studno.Text = NewID
End Sub

此方法在多用户环境中效果不佳。如果 2 个用户同时尝试获取下一个 id,则会导致重复的 id。可以通过在数据库中添加年份列并为 studno 使用自动增量字段来避免这种情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。