2013-11-29 5 views
0

структуры таблицы являетсяОшибка арифметического переполнения при преобразовании выражения для данных типа междунар

userid int 
fname varchar(50) 
lname varchar(50) 
Email varchar(50) 
Phone decimal(18,2) 

Это процедура

ALTER procedure [dbo].[AddUser] 
    @userid int, 
    @fname varchar(50), 
    @lname varchar(50), 
    @Email varchar(50), 
    @Phone decimal(18,2) 
as 
    insert into UserInfo(Userid, Fname, Lname, Email, Phone) 
    values(@userid, @fname, @lname, @Email, @Phone) 

Это мой код ....

protected void Button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["con1"]); 
    try 
    { 
     con.Open(); 

     SqlCommand cmd = new SqlCommand("AddUser",con); 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.AddWithValue("@userid",Int32.Parse(TextBox1.Text.Trim())); 
     cmd.Parameters.AddWithValue("@fname",TextBox2.Text) ; 
     cmd.Parameters.AddWithValue("@lname",TextBox3.Text) ; 
     cmd.Parameters.AddWithValue("@Email",TextBox4.Text); 
     cmd.Parameters.AddWithValue("@Phone",TextBox5.Text); 

     cmd.ExecuteNonQuery(); 

     Label1.Text = "Record Has Been Added Successfully!"; 
    } 
    catch (Exception en) 
    { 
     Label1.Text = "Retry to add"; 
    } 
} 

Если я вхожу Phone no value max any eg. 233242342423 это дает ошибку ... пожалуйста, как ее решить?

+3

Почему телефон 'десятичное (18,2)' в любом случае? Зачем ему нужны два десятичных знака? Как насчет ведущих нулей? –

+1

Вы действительно не должны использовать 'decimal' или любой другой цифровой тип для номера телефона! Номера телефонов не являются «цифрами», а всего лишь последовательностью цифр. – marsze

ответ

0

Предлагаю вам определить varchar (15) для хранения вашего телефона. (Для определения индекса производительности в этом поле)

+0

Это правда, но, вероятно, не отвечает на вопрос. –

+0

Если преобразование varchar (15) как в столбце, так и в sp также я получил ошибку Преобразование значения varchar '9881526473' переполнило столбец int. – user3049495

0

Вы не только потеряете свои ведущие ноль, но и плохую практику хранения телефонных номеров в виде целых чисел или парных разрядов. Используйте строку (текстовое поле), потому что вы не будете делать арифметические действия по номеру телефона.

+0

если преобразование varchar (15) как в столбце, так и в sp также я получил ошибку. Преобразование значения varchar '9881526473' переполнило столбец int. – user3049495

0

Как вы использовали AddWithValue, команда принимает все ваши столбцы типа string (кроме первого).

Это не будет хорошо работать для колонки: cmd.Parameters.AddWithValue("@Phone",TextBox5.Text)

, который, вероятно, не определяется как строка в базе данных, поэтому вам нужно попробовать разборе их в явном виде. Примечание. Вы должны рассмотреть возможность замены типа для хранения вашего телефона (varchar будет хорошим вариантом).

+0

Если преобразование varchar (15) как в столбце, так и в sp также я получил ошибку Преобразование значения varchar '9881526473' переполнило столбец int. – user3049495

+0

@ user3049495 - тогда вы должны изменить тип столбца в базе данных. –

+0

, так что я делаю плз меняет свой код и отвечаю мне ?? – user3049495

0

Вы не должны использовать тип данных номера телефона как десятичный. номер телефона в виде строки и дать длину, как телефон varchar (18). он будет работать.

+0

, если преобразование varchar (50) как в столбце, так и в sp также я получил ошибку. Преобразование значения varchar '9881526473' переполнило столбец int. – user3049495

0

Метод AddWithValue преобразует ваше значение в тип данных SQL в зависимости от типа значения, которое вы ему даете. Если тип данных SQL десятичное вам нужно разобрать на .NET десятичного для AddWithValue правильно преобразовать его:

cmd.Parameters.AddWithValue("@Phone", Decimal.Parse(TextBox5.Text)); 
Смежные вопросы

 Смежные вопросы