【问题标题】:Value was either too large or too small for an Int32 Error [duplicate]对于 Int32 错误,值太大或太小 [重复]
【发布时间】:2017-06-08 21:23:21
【问题描述】:

我正在尝试将Mobile Number 添加到我的 10 位列中

但它给了我错误

值对于 Int32 来说太大或太小

这里是代码

drpartyInfo[0]["MOB_NUM"] = string.IsNullOrWhiteSpace(e.Record["MOB_NUM"].ToString())
    ? DBNull.Value : (object)Convert.ToInt32(e.Record["MOB_NUM"].ToString());

【问题讨论】:

  • 只是为了更清楚地了解此处给出的所有答案。如果您知道值的上限/下限,则应选择适合的最小二进制数据类型(shortushortintuintlongulong)。数据库 LOVE 那些类型,它们占用固定数量的字节并且可以更容易地排序/索引。 string (varchar) 不太容易处理,因此根据经验,如果可以,请避免使用 string。另一方面,如果您的表中少于~1000 万行,则几乎不会注意到差异。这只是一个旁注,并不意味着是一个答案。
  • @pid:那么根据你的说法,手机号码适合哪种数据类型?
  • 10位表示下限为0,上限为9,999,999,999。这适合long (Int64)。任何数字 n 都适合 log2(n) + 1 位。将该数字增加到 8、16、32、64,您需要的类型最少。
  • 您不想将电话号码存储为号码,除非您单独存储前缀(地区、国家代码)。
  • 等等!如果MOB_NUM 是电话号码,则根本不要使用整数。它确实是一个code,它必须存储在一个字符串中,而不是一个quantity!我的错,我住的地方我们不说手机号码,而只是说电话号码。前导0 不能存储为任何类型的整数!使用字符串!!!

标签: c# asp.net


【解决方案1】:

最好使用longstringbyte array

你可以参考这个。

short.MaxValue:  32767
short.MinValue: -32768
ushort.MaxValue: 65535
ushort.MinValue: 0
int.MaxValue:    2,147,483,647
int.MinValue:   -2,147,483,648
uint.MaxValue:   4,294,967,295
uint.MinValue:   0
long.MaxValue:   9,223,372,036,854,775,807
long.MinValue:  -9,223,372,036,854,775,808
ulong.MaxValue:  18,446,744,073,709,551,615

您可以使用unsigned 数据类型,如果您确定它始终是正数。

【讨论】:

  • 您在ulong 上失踪了。 0-18 quintillion。
  • 谢谢@pid 我正在更新:P
【解决方案2】:

int不能存储手机号,把你的type改成string

【讨论】:

    【解决方案3】:

    Int32.MaxValue2,147,483,647

    如果手机号码长度为 10 位,则它有 79% 的可能性不适合 Int32。尝试使用 Int64(或 UInt64)。

    【讨论】:

      【解决方案4】:

      如果你的号码大于 2147483647,它不能存储到 int32,使用字符串或使用 int64,我怀疑你的号码大于 9223372036854775807

      【讨论】:

        猜你喜欢
        • 2011-09-14
        • 1970-01-01
        • 2013-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-09
        • 2012-08-05
        相关资源
        最近更新 更多