Автогенерация буквенно-цифрового идентификатора

Нужна помощь с автогенерированным идентификатором. У меня есть этот код, который автоматически генерирует идентификатор, но подходит только до 10 шагов. Он начинается с PO0001 и считается только до PO0010, как только он достигает PO0010, идентификатор застревает в PO0001.

вот код, который я использовал:

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

person nice.atma    schedule 06.03.2017    source источник
comment
Вы всегда можете использовать столбец AutoIncrement для идентификатора и добавить к нему PO для отображения. Если вы планируете создать ПК, не делайте этого.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 07.03.2017
comment
@Plutonix Я буду использовать автоматически сгенерированный идентификатор для нескольких строк в SQL, поэтому я не могу использовать столбец с автоинкрементом. Из списка данные будут сохранены в базе данных с использованием автоматически сгенерированного идентификатора, поэтому, когда я выбираю данные с помощью созданного мной идентификатора, я могу выбрать несколько строк.   -  person nice.atma    schedule 07.03.2017
comment
Что на самом деле представляют эти данные? Мне кажется, что вам может быть лучше использовать две таблицы, и в этом случае вы можете просто позволить базе данных генерировать идентификаторы в обоих случаях. В родительскую таблицу добавляется одна строка и создается один идентификатор, затем в дочернюю таблицу добавляется несколько строк с одним и тем же родительским идентификатором.   -  person jmcilhinney    schedule 07.03.2017
comment
@jmcilhinney Данные поступают из списка покупок с несколькими строками от одного клиента или клиента, и я сохраню их в базе данных, поэтому я не могу использовать столбец автоинкремента. Извините, но у меня проблемы с языком (английский), пожалуйста, объясните, что вы имеете в виду ..   -  person nice.atma    schedule 07.03.2017
comment
Ничего из того, что вы сказали, есть причина, по которой вы не можете использовать столбец с автоинкрементом.   -  person jmcilhinney    schedule 07.03.2017
comment
процесс сохраняет каждую строку в представлении списка в базу данных со столбцом для сгенерированного идентификатора, чтобы транзакции были сгруппированы как одна. Если используется столбец с автоматическим приращением, каждая строка будет иметь другой идентификатор, хотя они принадлежат одной транзакции. Если есть лучший способ сделать это, пожалуйста, предложите.   -  person nice.atma    schedule 07.03.2017
comment
Лучше всего сначала сохранить номер заказа, прежде чем принимать транзакции. если они будут отменены, просто отметьте номер заказа как отмененный. Номер ПО № просто замаскировал следующий номер (авто).   -  person maSTAShuFu    schedule 07.03.2017
comment
@maSTArHiAn не могли бы вы показать мне образец кода для решения, которое вы предложили?   -  person nice.atma    schedule 07.03.2017
comment
Привет, я больше не кодирую vb, но я все еще программист / аналитик. Вот шаги. 1) кнопку или меню, чтобы открыть окно заказа. 2) кнопка, которая говорит создать новый заказ на поставку (добавить новый код записи, если идентификатор автоматический, вам не нужно увеличивать вручную), сохраните новый номер как статус черновика. 3) замаскируйте идентификатор правильным представлением PO, обновите метку после addnew 4) разрешите ввод транзакций. 5) если пользователь решает отменить, пометьте заказ на покупку как отмененный, в противном случае соответственно. Удачи.   -  person maSTAShuFu    schedule 07.03.2017
comment
@maSTArHiAn Спасибо, я новичок в этом, но я постараюсь разобраться, основываясь на предложенном вами решении.   -  person nice.atma    schedule 08.03.2017


Ответы (1)


Заменить num.ToString().PadLeft(4, "000") на Format(num,"000#)

person Christiaan du Plessis    schedule 08.03.2017