字符串到Int转换:Convert.toInt16

时间:2012-02-22 13:31:24

标签: c# asp.net string int

这是代码。

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,值太大或太小。

请帮助我

此致 阿琼

8 个答案:

答案 0 :(得分:5)

尝试在quantityThreshold文本框中输入更小或更大的值。

<强>更新

好的,阅读您对Saeed Amiri的评论回复4036953909对于int来说太大了 - 它的范围是-21474836482147483647

您可以使用范围为uint0的{​​{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。

您需要使用UInt32long

答案 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范围内的值。或使用更大的类型。