【问题标题】:Error converting data type bigint to int [SQL Server]将数据类型 bigint 转换为 int 时出错 [SQL Server]
【发布时间】:2011-07-14 22:36:54
【问题描述】:

我必须使用存储过程将电话号码插入数据库。但在插入时显示错误

SqlException:转换数据时出错 输入 bigint 到 int。

long phoneNumber = Convert.ToInt64(Phone.Text);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@phone",phoneNumber);

cmd.ExecuteNonQuery();

ie 对于这个参数, DBType 是 Int64 SQLDbType 是 BigInt

我也在 SQL Server 中使用 BigInt 作为列的 DataType。

那么这里可能出了什么问题..

我发现 1999999999 [2^32] 没有插入

如果您需要更多信息,请告知

提前致谢

【问题讨论】:

  • 为什么不使用 varchar ?还是字符?
  • 电话号码无论如何都应该存储为字符串以保留前导零,但是您可以发布您的插入语句吗?还有桌上的触发器吗?
  • SProc中@phone的定义是什么,bigint?
  • SQL 列的数据类型以前是int 吗?你最近改成bigint了吗?您是否在应用程序运行时进行了更改?
  • @Richard.. 那是 Int.. 这就是问题所在。将其更改为 bigint 并且它工作得很好。但是我计划将它存储为字符串作为 @martin ,@malinois 说这是一个更好的做法。如果你可以发布你的解决方案作为答案,我可以接受它。谢谢。 .

标签: .net sql sql-server sql-server-2005 exception


【解决方案1】:

看到这个int, bigint, smallint, and tinyint

大整数
-2^63 的整数(整数)数据 (-9,223,372,036,854,775,808) 通过 2^63-1 (9,223,372,036,854,775,807)。 存储大小为 8 个字节。

int
-2^31 的整数(整数)数据 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647)。存储大小为 4 字节。 int 的 SQL-92 同义词是 整数。

OP 说:

我发现 1999999999 [2^32]不是

1,999,999,999 适合 int,因为它小于 2,147,483,647,但 2,999,999,999 不适合,因为它大于 2,147,483,647

最好的办法是使用varchar(10) 来存储电话号码。如果您担心在字符串中获取数字以外的字符,您可以像这样进行验证:

你可以像这样验证你的字符串:

declare @PhoneNumber varchar(10)
select @PhoneNumber='123e0'
if @PhoneNumber LIKE '%[^0-9]%'
    print 'NOT NUMERIC'
else
    print 'NUMERIC'

select @PhoneNumber='1234567890'
if @PhoneNumber LIKE '%[^0-9]%'
    print 'NOT NUMERIC'
else
    print 'NUMERIC'

这是运行上述代码时得到的结果:

NOT NUMERIC
NUMERIC

【讨论】:

    【解决方案2】:

    使用 varchar(10) 或 char(10) 代替 bigint。

    【讨论】:

      猜你喜欢
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2012-06-05
      相关资源
      最近更新 更多