字符串到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

字符串到Int的转换:Convert.toInt16

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

更新

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

您可以使用范围为04294967295uint

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的有符号整数。

您需要使用UInt32long

"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范围内。或者使用较大的类型。