【问题标题】:String to Int conversion: Convert.toInt16字符串到 Int 的转换:Convert.toInt16
【发布时间】:2012-02-22 13:31:24
【问题描述】:

这是代码。

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 来说太大或太小。

请帮帮我

问候, 阿琼

【问题讨论】:

  • 错误信息不是一目了然吗?
  • 显示quantityThreshold.Text的值。
  • @SaeedAmiri “QuantityThreshold = 4036953909”的样本值
  • @AndrewWhitaker 是的,但请帮我解决这个问题

标签: c# asp.net string int


【解决方案1】:

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

更新

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

您可以使用uint,其范围为04294967295

Convert.ToUInt32(ratecenterid.Text)

尽管您可能还需要将参数类型更改为 OleDbType.UnsignedInt

【讨论】:

  • ratecenterid 是主键。它是不可编辑的,而且在更新操作时只需阅读标签
  • 对不起,我的意思是 quantityThreshold 文本框;因为那是你得到错误的那个
【解决方案2】:

来自 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 小得多:

Int16 值类型表示有符号整数,其值范围从负 32768 到正 32767。

您需要使用UInt32long

【讨论】:

  • 如果还不够,OleDbType.Integer 会遇到另一个问题,具有相同的限制
【解决方案3】:

“QuantityThreshold = 4036953909”的样本值

没错。 不会适合Int16(根据您的标题),其最大值为32767。这甚至不适合Int32(根据您的代码)(最大值 2,147,483,647)。它适合UInt32,并且很容易适合Int64 - 也许后者才是你真正想要的?

(您还应该澄清您的问题 - 您使用的是 Int32 还是 Int16?)

【讨论】:

    【解决方案4】:

    您的当前值在UInt32 范围内,OleDbType.Integer 大小为 4 字节并映射到Int32,如果您想使用UInt32,您应该使用UnsignedInt 作为您的参数类型,并使用 UInt32转换:

       cmd.Parameters.Add("@QuantityThreshold", OleDbType.UnsignedInt).Value = 
        Convert.ToUIn32(quantityThreshold.Text)
    

    【讨论】:

      【解决方案5】:

      Int32 的范围是 -2147483648 到 2147483647。您可以使用更大的类型,例如 uint(0 到 4294967295)或 long(-9.2233E+18 到 9.2233E+18)。

      【讨论】:

        【解决方案6】:

        参考:Error: Value was either too large or too small for an Int32

        这个数字对于 int32 来说太大了。你应该把它存储为 字符串.(varchar)

        【讨论】:

          【解决方案7】:

          您在其他答案中得到了原因,但我没有看到有人提到 ToInt64。只需将 ToInt32 更改为 ToInt64 并确保 @QuantityThreshold 的数据类型可以处理它。

          Int64 值类型表示整数,其值范围从负 9,223,372,036,854,775,808 到正 9,223,372,036,854,775,807。

          【讨论】:

            【解决方案8】:

            要解决您的问题,您必须将验证放在您的文本框上 - 数量阈值,它的值应该在 Int32 的范围内。或使用更大的字体。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-04
              • 1970-01-01
              • 1970-01-01
              • 2015-03-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多