这是代码。
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,值太大或太小。
请帮助我
此致 阿琼
答案 0 :(得分:5)
尝试在quantityThreshold
文本框中输入更小或更大的值。
<强>更新强>
好的,阅读您对Saeed Amiri的评论回复4036953909
对于int
来说太大了 - 它的范围是-2147483648
到2147483647
您可以使用范围为uint
到0
的{{1}}
4294967295
虽然您可能还需要将参数类型更改为Convert.ToUInt32(ratecenterid.Text)
。
答案 1 :(得分:4)
来自MSDN - Int32 Structure:
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
:< / p>
Int16值类型表示有符号整数,其值范围从负32768到正32767。
您需要使用UInt32
或long
。
答案 2 :(得分:3)
“QuantityThreshold = 4036953909”的样本值
右。那个不会适合Int16
(根据你的标题),其最大值为32767.这甚至不适合Int32
(按照你的代码)(最大值2,147,483,647)。它 适合UInt32
,并且很容易融入Int64
- 也许后者是你真正想要的?
(您还应该澄清您的问题 - 您使用的是Int32
还是Int16
?)
答案 3 :(得分:2)
Int32
的范围是-2147483648到2147483647.您可以使用更大的类型,例如,uint(0到4294967295)或更长(-9.2233E + 18到9.2233E + 18)。
答案 4 :(得分:2)
您当前的值在UInt32
范围内,OleDbType.Integer
大小为4字节并映射到Int32
,如果您想使用UInt32
,则应使用{{1}作为参数类型,并使用UInt32转换:
UnsignedInt
答案 5 :(得分:1)
参考:Error: Value was either too large or too small for an Int32
对于int32,这个数字是大的。你应该把它存储为 串。(VARCHAR)
答案 6 :(得分:1)
你在其他答案中得到了原因,但我没有看到有人提到ToInt64。只需将ToInt32更改为ToInt64,并确保@QuantityThreshold的数据类型可以处理它。
Int64值类型表示整数值,范围从负9,223,372,036,854,775,808到正数9,223,372,036,854,775,807。
答案 7 :(得分:1)
要解决您的问题,您必须将验证放在文本框上 - quantityThreshold,它应该具有Int32范围内的值。或使用更大的类型。