字符串到Int的转换:Convert.toInt16
本文关键字:Convert toInt16 转换 Int 字符串 | 更新日期: 2023-09-27 18:25:37
这是代码。
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);
我在CODE 2中得到以下错误,但在CODE 1 中没有
错误:值对于Int32来说太大或太小。
请帮我
谨致问候,Arjun
尝试在quantityThreshold
文本框中输入一个较小或较大的值。
更新
好吧,阅读你对Saeed Amiri的评论回复,4036953909
对于int
来说太大了——它的范围是-2147483648
到2147483647
您可以使用范围为0
到4294967295
的uint
Convert.ToUInt32(ratecenterid.Text)
尽管您可能还需要将参数类型更改为OleDbType.UnsignedInt
。
来自MSDN-Int32结构:
Int32是一种不可变的值类型,它表示值范围从负2147483648(由Int32.MinValue常量表示)到正2147483647(由Int3.2MaxValue常量表示。.NET Framework还包括一个无符号32位整数值类型UInt32,它表示范围从0到4294967295的值。
您试图使用一个无法表示为Int32
的值。
不确定为什么你的标题是关于Int16
的,因为你的代码和错误表明你正在使用Int32
——不管怎样——Int16
的范围比Int32
小得多:
Int16值类型表示值范围从负32768到正32767的有符号整数。
您需要使用UInt32
或long
。
"QuantityThreshold=4036953909"的样本值
对。不适合(根据您的标题)Int16
,其最大值为32767。这甚至不适合Int32
(根据您的代码)(最大值2147483647)。它会适合UInt32
,也很容易适合Int64
——也许后者才是你真正想要的?
(您还应该澄清您的数量-您使用的是Int32
还是Int16
?)
当前值在UInt32
范围内,OleDbType.Integer
大小为4字节,并映射到Int32
,如果要使用UInt32
,则应使用UnsignedInt
作为参数类型,并使用UInt32转换:
cmd.Parameters.Add("@QuantityThreshold", OleDbType.UnsignedInt).Value =
Convert.ToUIn32(quantityThreshold.Text)
Int32
的范围为-2147483648到2147483647。您可以使用更大的类型,例如uint(0到4294967295)或long(-9.2233E+18到9.2233E+18)。
Ref:错误:值对于Int32 来说太大或太小
这个数字对于int32来说太大了。你应该把它作为一串(varchar)
你在其他答案中找到了原因,但我没有看到任何人提到ToInt64。只需将ToInt32更改为ToInt64,并确保@QuantityThreshold的数据类型可以处理它。
Int64值类型表示数值范围从负9223372036854775808到正9223372036864775807的整数。
要解决您的问题,您必须对您的文本框-quantityThreshold进行验证,其值应在Int32范围内。或者使用较大的类型。