Int32错误:值过大或过小。

6

我试图在我的列中添加一个手机号码,它是10位数的。

但是它给了我一个错误:

值对于 Int32 来说过大或过小

这是代码:

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

只是为了更清楚地回答这里给出的所有答案。如果您拥有并知道值的上/下限,则应选择最小的适合的二进制数据类型(shortushortintuintlongulong)。数据库喜欢这些类型,它们占用固定的字节数,并且可以更容易地进行排序/索引。一个 stringvarchar)不易处理,因此作为经验法则,如果可以的话避免使用 string。另一方面,如果表中的行数少于 ~1000 万行,则差异几乎不会被注意到。这只是一个旁注,不是答案。 - pid
@pid:那么根据您的看法,哪种数据类型适合存储手机号码? - Nad
10个数字意味着下限为0,上限为9,999,999,999。这适用于longInt64)。无论数字n是多少,都可以适应于log2(n) + 1位。将该数字提升至8、16、32、64,即可得到所需的最小类型。 - pid
除非您单独存储前缀(区号、国家代码),否则不要将电话号码存储为数字。 - CodeCaster
唯一正确的答案是Ikram Turgunbaev的。 - pid
显示剩余4条评论
4个回答

4

最好使用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


2

手机号码无法存储在int类型中,请将其更改为字符串类型


2

如果您的数字大于2147483647,它将无法存储到int32中,请使用字符串或使用int64。我怀疑您的数字是否大于9223372036854775807。


1

Int32.MaxValue2,147,483,647

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接