2017-01-24 43 views
0

我想补充Mobile Number到我的专栏是10位值是太大或太小,一个Int32错误

,但它给我的错误作为

值要么太大或过小为一个Int32

下面是代码

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

只是为了就有点更清楚所有这里给出的答案。如果你已经知道了值的上下限,你应该选择适合的最小二进制数据类型('short','ushort','int','uint','long','ulong')。数据库* LOVE *这些类型,它们占用固定数量的字节,并且可以更容易地进行排序/索引。 'string'('varchar')不容易处理,所以如果可以的话,根据经验法则避免使用'string'。另一方面,如果你在表格中有*少于1000万行*,那么差异将几乎不明显。这只是一个附注,并不意味着是一个答案。 – pid

+0

@pid:所以根据你哪个数据类型适合在这里的手机号码? – BNN

+0

10位表示下限为0,上限为9,999,999,999。这符合'长'('Int64')。无论哪个数字'n'都适合'log2(n)+ 1'位。将该数字提高到8,16,32,64,并且您的类型最少。 – pid

回答

1

手机号码不能存储在整数,将您的类型更改为字符串

0

更好,你应该使用long,stringbyte 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数据类型。

+0

你在'ulong'上失踪。 0-18十亿分之一。 – pid

+1

谢谢@pid我正在更新:P –

0

Int32.MaxValue2,147,483,647

如果手机号码是10位数字,则有79%的机会不适合Int32。尝试和Int64(或UInt64)来代替。

0

如果您的号码是不是更大2147483647,它不能被存储到一个INT32,用细绳或使用的Int64,我怀疑你的电话号码是大于9223372036854775807

相关问题