Ошибка преобразования типа данных bigint в int [SQL Server] - PullRequest
2 голосов
/ 14 марта 2011

Я должен вставить номер телефона в базу данных, используя хранимую процедуру. Но при вставке он показывает ошибку как

SqlException: ошибка преобразования данных введите bigint для int.

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

cmd.CommandType = CommandType.StoredProcedure;

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

cmd.ExecuteNonQuery();

то есть для этого параметра, DBType - это Int64 SQLDbType - BigInt

Я также использовал BigInt в качестве типа данных столбца в SQL Server.

Так что здесь может пойти не так ..

Я считаю, что 1999999999 [<2 ^ 32] вставляется правильно, а 2999999999 [> 2 ^ 32] не является

Пожалуйста, скажите, если вам нужно больше информации

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

см. int, bigint, smallint и tinyint

BIGINT
Целочисленные (целые числа) данные из -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 (2147483647). Размер хранилища 4 байт. Синонимом SQL-92 для int является целое число.

ОП сказал:

Я считаю, что 1999999999 [<2 ^ 32] вставляется правильно и 2999999999 [> 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
1 голос
/ 14 марта 2011

Используйте bigarch (10) или char (10) вместо bigint.

...