Преобразование строки в Int: Convert.toInt16 - PullRequest
0 голосов
/ 22 февраля 2012

Это код.

CODE 1: cmd.Parameters.Add("@RateCenterID", OleDbType.Integer).Value = Convert.ToInt32(ratecenterid.Text);

CODE 2:  cmd.Parameters.Add("@QuantityThreshold", OleDbType.Integer).Value = Convert.ToIn32(quantityThreshold.Text);

Я получаю следующую ошибку в КОДЕ 2 , но не в КОДЕ 1

Ошибка: Значение былолибо слишком большой, либо слишком маленький для Int32.

любезно помогите мне

С уважением, Арджун

Ответы [ 8 ]

5 голосов
/ 22 февраля 2012

Попробуйте ввести меньшее или большее значение в текстовом поле quantityThreshold.

Обновление

Хорошо, прочитайте ваш комментарий к Саиду Амири, 4036953909слишком велик для int - его диапазон составляет от -2147483648 до 2147483647

Вы можете использовать uint с диапазоном от 0 до 4294967295

Convert.ToUInt32(ratecenterid.Text)

Хотя вам, вероятно, потребуется также изменить тип параметра на OleDbType.UnsignedInt.

4 голосов
/ 22 февраля 2012

Из MSDN - Структура Int32 :

Int32 - это тип неизменяемого значения, представляющий целые числа со знаком со значениями в диапазоне от отрицательных 2 147 483 648 (который представлен Int32.MinValueконстанта) через положительное значение 2 147 483 647 (который представлен константой Int32.MaxValue. .NET Framework также включает в себя тип беззнакового 32-разрядного целочисленного значения UInt32, представляющий значения в диапазоне от 0 до 4 294 967 295.

Вы пытаетесь использовать значение, которое невозможно представить как Int32.

Не уверен, почему ваш заголовок равен Int16, поскольку ваш код и ошибка указывают на то, что вы используете Int32 -независимо - Int16 имеет гораздо меньший диапазон, чем Int32:

Тип значения Int16 представляет целые числа со знаком со значениями в диапазоне от отрицательного 32768 до положительного 32767.

Вам нужно использовать UInt32 или long.

3 голосов
/ 22 февраля 2012

выборочное значение для «Кол-во пороговых значений = 4036953909»

правый. То, что не будет вписываться в Int16 (согласно вашему названию), которое имеет максимальное значение 32767. Это даже не вписывается в Int32 (согласно вашему коду) (макс. значение 2 147 483 647). будет вписываться в UInt32 и легко вписывается в Int64 - возможно, последнее - это то, что вы действительно ищете?

(Вы также должны уточнить свой вопрос - используете ли вы Int32 или Int16?)

2 голосов
/ 22 февраля 2012

Ваше текущее значение находится в области действия UInt32, а размер OleDbType.Integer равен 4 байтам и отображается на Int32, если вы хотите использовать UInt32, вам следует использовать UnsignedInt в качестве тип параметра и использовать преобразование UInt32:

   cmd.Parameters.Add("@QuantityThreshold", OleDbType.UnsignedInt).Value = 
    Convert.ToUIn32(quantityThreshold.Text)
2 голосов
/ 22 февраля 2012

Int32 имеет диапазон от -2147483648 до 2147483647. Вы можете использовать больший тип, например, uint (от 0 до 4294967295) или long (от -9.2233E + 18 до 9.2233E + 18).

1 голос
/ 22 февраля 2012

Чтобы решить вашу проблему, вы должны будете поставить проверку в текстовое поле - кол-во ThThThreshold, которое должно иметь значение в диапазоне Int32.или используйте больший тип.

1 голос
/ 22 февраля 2012

Вы получили причину в других ответах, но я не видел никого, кто бы упоминал ToInt64. Просто измените ToInt32 на ToInt64, а также убедитесь, что тип данных @QuantityThreshold может его обработать.

Тип значения Int64 представляет целые числа со значениями в диапазоне от отрицательных 9,223,372,036,854,775,808 до положительных 9,223,372,036,854,775,807.

1 голос
/ 22 февраля 2012

Ссылка: Ошибка: значение было слишком большим или слишком маленьким для Int32

Это число является большим для int32.Вы должны просто сохранить его как строку. (Varchar)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...