我有这个代码
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()
它可以工作,但我想把它作为一个功能,所以我可以在我的项目中使用它,我想知道如何制作它?
答案 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,请参阅: