Значение было слишком большим или слишком маленьким для Int32

Возможный дубликат:
Какое максимальное значение для int32?

Mobileno = Convert.ToInt32(txmobileno.Text);

ошибка, которую я получаю при вставке в базу данных

Ответ 1

Почему бы вам не использовать целое число любого типа для хранения номера телефона?

Вы не можете целенаправленно делать какую-либо арифметику на одном, и вы теряете все ведущие нули.

Вместо этого используйте строку.

Ответ 2

An integer (Int32) ограничен в значениях, которые он может хранить, поскольку он "только" использует 32 бита. Он может хранить значение между 2 147 483 647 и -2 147 483 648. (Дополнительная информация о MSDN)

Значение, представленное txmobileno.Text, слишком велико или слишком мало.

Глядя на имя txmobileno, вероятно, номер мобильного телефона. Этот тип чисел имеет слишком много цифр для хранения в int32. Также номер телефона имеет тенденцию начинаться с 0 или 00 или + (международный). Нет способа хранить этот вид информации в целочисленном (или другом типе номера). Просто сохраните их в string.

Ответ 3

Как указывали другие, ошибка в запоминании номера телефона как целого.

  • Вы теряете возможность хранить символы и пробелы, например коды стран - "+44 (0800) 12345".
  • Нет логической причины хранить его как целое число - вам понадобится сделать арифметику по двум телефонным номерам? Имеет ли смысл добавить два телефонных номера вместе?
  • Ведущие нули будут потеряны - (0800 12345) станет (80012345).
  • Сохранение его в виде строки позволяет выполнять проверку регулярных выражений на входе пользователя.

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

  • Предпочитают Int32.TryParse вместо Convert.ToInt32, когда исходное значение является строкой.
  • При использовании значений, которые могут потенциально переполняться, заключите код в отмеченный блок {...}.