如何让auto id在模块中运行?

时间:2014-04-26 19:03:52

标签: vb.net visual-studio-2010

我有这个代码

 With ServiceInformationDialog


        Dim cmd As New SqlCommand
        Dim id As Integer
        cn.Open()
        cmd.Connection = cn
        cmd.CommandText = " SELECT MAX(Service_ID) FROM Table_Service"

        If IsDBNull(cmd.ExecuteScalar) Then

            id = 1
            .ServiceIDserviceTextBox1.Text = id
        Else
            id = cmd.ExecuteScalar + 1
            .ServiceIDserviceTextBox1.Text = id

        End If
        cmd.Dispose()
    End With

    cn.Close()

它可以工作,但我想把它作为一个功能,所以我可以在我的项目中使用它,我想知道如何制作它?

2 个答案:

答案 0 :(得分:1)

VB中的模块通常用于这样的实用程序功能 - 我不知道'cn'所在的位置,所以除了为模块命名对您的应用程序更有意义的东西外,您还必须弄明白这一点:

Friend Module Utility
    Public Function MaxServiceID(ByVal column As String, ByVal table As String) As Integer
        Dim cmd As New SqlCommand
        cn.Open()
        cmd.Connection = cn
        cmd.CommandText = " SELECT MAX(" & column & ") FROM " & table

        Dim id As Integer
        If IsDBNull(cmd.ExecuteScalar) Then
            id = 1
        Else
            id = cmd.ExecuteScalar + 1
        End If

        cmd.Dispose()
        cn.Close()

        Return id
    End Function
End Module

然后你会:

ServiceInformationDialog.ServiceIDserviceTextBox1.Text = Utility.MaxServiceID("Service_ID", "Table_Service")

答案 1 :(得分:0)

当您检索这样的ID时,其他用户可能已经插入了具有此ID的记录,因此在尝试插入记录时,由于并发问题,您将获得唯一的密钥冲突错误。

执行此操作的一种好方法是让DB处理您的唯一ID,对于MSSQL,通常使用IDENTITY column,对于Oracle 10 / 11g,您可以使用触发器,12c supports this feature盒子。然后检索已插入记录的ID(如果由于某种原因需要它)。对于SQL,请参阅: