Member 14649324 Ответов: 2

Я хочу сгенерировать автономер с форматом года месяца и даты


Для создания счетчика в текстовом поле в vb.net с помощью параметра dateformat как 20-08-30-001

но это не работает я сделал один публичный sub для выбора максимального числа из базы данных и один dunction с этим кодом я не знаю как это сделать сейчас

Что я уже пробовал:

Public Sub CalculateNewRecordNumber(ByVal record As String)
    Dim data As String() = record.Split("-"c)
    Dim currentDate As DateTime = DateTime.Today
    Dim recordYear As Integer = Integer.Parse(data(0))
    recordYear = Integer.Parse("20" & recordYear)
    Dim recordMonth As Integer = Integer.Parse(data(1))

    If currentDate.Year = recordYear Then

        If currentDate.Month = recordMonth Then
            Dim number As Integer = Integer.Parse(data(2))
            number += 1
            record = recordYear & recordMonth & "-"
            Dim _recNumberOnly As String = number.ToString()

            For i As Integer = 0 To 4 - 1

                If _recNumberOnly.Length = 4 Then
                    Exit For
                Else
                    _recNumberOnly = "0" & _recNumberOnly
                End If
            Next

            record += _recNumberOnly
        Else
            recordMonth += 1
            record = recordYear & recordMonth & "-0001"
        End If
    Else
        recordYear += 1
        record = recordYear & "08-0001"
    End If


End Sub

Maciej Los

Какой поставщик баз данных?

Member 14649324

база данных SQL

2 Ответов

Рейтинг:
6

Maciej Los

Прежде всего, я согласен с OriginalGriff. Использование vb.net код для генерации строкового значения автоинкремента на основе даты-плохая идея, особенно в многопользовательской среде (вы получите дубликаты!).

У тебя есть несколько вариантов. Взгляните сюда: Microsoft SQL Server: генерация порядкового номера в день - переполнение стека[^]


Member 14649324

Спасибо так что я попробую это сделать

Рейтинг:
2

OriginalGriff

Это действительно плохая идея. Проблема в том, что вы объединяете число на основе БД с генератором чисел на основе VB, и это всегда приводит к периодическим проблемам, которые действительно могут нарушить целостность вашей БД.

Что происходит, так это то, что вы получаете максимальное значение из SQL, добавляете к нему одно и записываете его в БД. Пока вы это делаете, я также прочитал максимальное значение из SQL, добавил к нему одно и записал его в БД. Внезапно оба использования - законно - работают с одним и тем же идентификатором строки, и это может вызвать некоторые действительно трудные для устранения проблемы, потому что ваши данные и мои смешиваются. Поскольку это обычно не замечается в течение нескольких дней, месяцев или даже лет к тому времени, когда это замечено, никто не может точно вспомнить, что должно быть чем (не говоря уже о том, какую дату и номер каждый должен иметь!)

Если вам нужно реализовать этот точный формат, то сделайте все это в SQL (который будет Пита) как атомарную операцию внутри транзакции, с уникальным ограничением на столбец и, вероятно, какой-то встроенной формой повтора. Противный.


Member 14649324

можете ли вы помочь мне плз как я могу реализовать это в sql можете ли вы помочь мне с запросом или какими бы то ни было требованиями