Я пытаюсь получить значение из списка и добавить 1 к результату для включения в базу данных доступа. Проблема в том, что если я добавлю оператор inc, например, +1, он продолжит изменять его, чтобы использовать CDbl, что дает мне неверный результат. Пример. Перед добавлением 1 отображается «011697», после добавления 1 - «11697». Почему упал ведущий ноль. Это текстовое поле, поэтому я не понимаю, почему оно меняется на CDbl. Может кто-нибудь помочь с этим. Спасибо

    Dim id As String

    While dr.Read()

          id = dr.Item(0).ToString
          id = CStr(CDbl(id) + 1)

    End While 
1
user1532468 28 Дек 2013 в 16:52

2 ответа

Лучший ответ

Преобразуйте число в целое число, добавьте значение приращения и затем переформатируйте в строку из 6 чисел с необходимыми ведущими нулями.

Dim id As String
While dr.Read()
      id = dr.Item(0).ToString
      id = string.Format("{0:D6}", (Convert.ToInt32(id) + 1))
End While 

Преобразование в число заставляет отбрасывать начальный ноль, поскольку он не имеет смысла в числе, используя составное форматирование восстанавливает строку с нужным количеством символов и заполняет недостающие символы нулями

Кстати, если есть возможность, попробуйте удалить такие функции, как CDbl и CStr. Они присутствуют только для облегчения преобразования старых приложений VB6. В NET есть много альтернатив, и, за исключением особых случаев, они лучше, чем функции совместимости с VB6.

2
Steve 28 Дек 2013 в 13:18

Используйте этот код, если хотите сохранить ноль:

Dim id As String

While dr.Read()

      id = dr.Item(0).ToString
      id = CStr(CDbl(id) + 1)
      id = id.PadLeft(6, "0")
End While 
1
Al-3sli 28 Дек 2013 в 13:11