【问题标题】:Value was either too large or too small for an Int32 [duplicate]对于 Int32 而言,值太大或太小 [重复]
【发布时间】:2011-09-14 11:55:15
【问题描述】:

可能重复:
What is the maximum value for a int32?

Mobileno = Convert.ToInt32(txmobileno.Text);

插入数据库时​​出现错误

【问题讨论】:

  • 数据库表中的具体数据类型是什么?
  • 您需要检查您的数据库表中的数据类型。
  • @Shadow Wizard 在数据库中数据类型为 int
  • @vignesh 什么版本的 SQL Server?您可以发布导致实际错误的代码行吗?

标签: c# asp.net


【解决方案1】:

您到底为什么要使用任何类型的整数来存储电话号码?

您无法对 1 进行任何有意义的算术运算,并且会丢失所有前导零。

改用字符串。

【讨论】:

    【解决方案2】:

    integer (Int32) 可以存储的值受到限制,因为它“仅”使用 32 位。它可以存储 2,147,483,647 和 -2,147,483,648 之间的值。 (More information on MSDN)

    txmobileno.Text所代表的值,太大或太小。

    看名字txmobileno大概是手机号吧。这种数字的位数太多,无法存储在int32 中。此外,电话号码往往以 0 或 00 或 +(国际)开头。无法将此类信息存储在整数(或其他数字类型)中。只需将它们存储在string 中即可。

    【讨论】:

    • 从好的方面来说,我所在美国州的电话号码通常为 503-nnn-nnnn 或 541-nnn-nnnn,这意味着 不会被打扰由编写不佳的自动拨号程序假设整数可以容纳任何电话号码。 :)
    【解决方案3】:

    正如其他人所指出的,将电话号码存储为整数是错误的。

    • 您无法存储字符和空格,例如国家代码 - “+44 (0800) 12345”。
    • 没有逻辑理由将其存储为整数 - 您是否需要对两个电话号码进行算术运算?将两个电话号码加在一起有意义吗?
    • 前导零将丢失 - (0800 12345) 将变为 (80012345)。
    • 将其存储为字符串允许您对用户输入进行正则表达式验证。

    话虽如此,最初的问题确实提出了一些应该提出的观点:

    • 当源值为字符串时,首选 Int32.TryParse 而不是 Convert.ToInt32。
    • 处理可能溢出的值时 - 将代码包含在选中的 { ... } 块中。

    【讨论】:

    • Int32.TryParse 更好。谢谢@MattDavey
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 2018-07-09
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多