2017-03-06 110 views
0

需要自动生成ID的帮助。我有这个自动生成ID的代码,但最多只有10个增量。它始于PO0001并且只计数到PO0010,一旦到达PO0010该ID卡在PO0001中。自动生成字母数字ID

这里是我使用的代码:

Public Function newPOID(prefix As String, storedProcedure As String) As String 

    Dim newId As String = prefix + "0001" 
    Dim adpt As New SqlDataAdapter 
    Dim ds As New DataSet 
    Dim dr As SqlDataReader 
    Dim conn As New SqlConnection 
    conn.ConnectionString = conString 
    utos = New SqlCommand(storedProcedure, conn) 
    utos.CommandType = CommandType.StoredProcedure 
    conn.Open() 
    dr = utos.ExecuteReader 

    If dr.Read Then 
     If dr.IsDBNull(0) Then 
      Dim num As Integer = 1 
      'Dim prefix As String = "PO" 
      Dim append As String = prefix + num.ToString().PadLeft(4, "000") 
      newId = append 
     Else 
      Dim POstring As String = dr(0).ToString.Substring(0, 3) 
      Dim POID As Integer = dr(0).ToString.Substring(5) + 1 
      Dim append As String = POstring + POID.ToString().PadLeft(3, "000") 
      newId = append 
     End If 
     conn.Close() 
    End If 


    Return newId 

End Function 
+0

你总是可以使用的ID和前面加上“PO”自动增量列到它的显示。如果你打算生成PK,不要这样做。 – Plutonix

+0

@Plutonix我将在SQL中为多行使用自动生成的ID,这就是为什么我不能'使用自动增量列。在列表视图中,数据将使用自动生成的ID保存在数据库中,以便当我使用创建的ID选择数据时,我可以选择多行。 –

+0

这些数据实际上代表什么?在我看来,使用两个表可能会更好,在这种情况下,您可以简单地让数据库在两种情况下生成ID。将一行添加到父表中并生成单个标识,然后将多行添加到具有相同父标识的子表中。 – jmcilhinney

回答

0

更换num.ToString().PadLeft(4, "000")Format(num,"000#)