我的表格中有 UserID 字段,我需要在我的应用中获取该值,每当我想添加新记录时,按值递增“1 “
所以这就是我试图让最后一个ID 从我的桌子中消失的方式。
例如我的值为“A000”,我需要将该值增加“1”,以便它变为“A001 “等......在PinnyM指出'A999'后,它应该变为'A1000'。
我不想从数据库中编写任何存储过程或任何其他方式。我想使用现有代码以更简单的方式进行编写。
Dim strConnection As String = "Data Source=.\SqlExpress;Initial Catalog=Subscription;Integrated Security=True"
Dim con As New SqlConnection(strConnection)
con.Open()
Dim comm As New SqlCommand
comm.CommandText = "SELECT MAX(UserID) FROM Customers"
comm.Connection = con
Dim MaxUserID As Object = comm.ExecuteScalar()
txtID.text=MaxUserID
答案 0 :(得分:0)
我通过这种方式设法工作:
Public Function IncrementString(ByVal Sender As String) As String
Dim Index As Integer
For Item As Integer = Sender.Length - 1 To 0 Step -1
Select Case Sender.Substring(Item, 1)
Case "000" To "999"
Case Else
Index = Item
Exit For
End Select
Next
If Index = Sender.Length - 1 Then
Return Sender & "1" ' Optionally throw an exception ?
Else
Dim x As Integer = Index + 1
Dim value As Integer = Integer.Parse(Sender.Substring(x)) + 1
Return Sender.Substring(0, x) & value.ToString()
End If
End Function
答案 1 :(得分:-1)
基于上述评论,我建议:
comm.CommandText = "SELECT 'A' + RIGHT('000', CAST((MAX(primary_key) + 1) as nvarchar(255)), 3) FROM Customers"
这是做什么的:
我绝对不尝试使用基于字符的密钥来执行此操作,因为UserID
似乎已构建。另请注意,这不是原子的,并不保证在您执行之前另一个连接不会插入行。所以它确实返回了一个可能实际上不正确的乐观价值。如果这对您不起作用,请考虑让IDENTITY为您完成工作,并在使用SCOPE_IDENTITY()