在vb.net中自动增加nvarchar值

时间:2013-02-03 03:33:59

标签: vb.net increment nvarchar

我的表格中有 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

2 个答案:

答案 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"

这是做什么的:

  • 获取最后一个密钥并添加1
  • 转换为nvarchar
  • 必要时填充0(最多3个位置)

我绝对尝试使用基于字符的密钥来执行此操作,因为UserID似乎已构建。另请注意,这不是原子的,并不保证在您执行之前另一个连接不会插入行。所以它确实返回了一个可能实际上不正确的乐观价值。如果这对您不起作用,请考虑让IDENTITY为您完成工作,并在使用SCOPE_IDENTITY()

创建行后获取值