2015-03-23 2 views
0

не удалось преобразовать значение параметра из int32 в байт Кодекса базы данныхя хочу, чтобы преобразовать из int64 в байт

и процедуры в базе данных:

веб-форму код позади:

client c = new client(); 
c.name = Textbox_Addclient_first.Text + " " + Textbox_Addclient_second.Text + 
    " " + Textbox_Addclient_third.Text; 
c.address = Textbox_addclientadress.Text; 
c.phone = int.Parse(Textbox_addclientphone.Text); 

код класса:

SqlCommand com = new SqlCommand("add_client", con); 

com.CommandType = CommandType.StoredProcedure; 
com.Parameters.Add("@name", SqlDbType.NVarChar).Value = this.name; 
com.Parameters.Add("@address", SqlDbType.NVarChar).Value = this.address; 
com.Parameters.Add("@name", SqlDbType.TinyInt).Value = this.phone; 
com.ExecuteNonQuery(); 
con.Close(); 

b = true; 
+3

Я не думаю, что вы будете возможно, преобразовать номер телефона в байтовый ... байтовый массив. Почему бы не изменить тип в своей базе данных? См. Http://stackoverflow.com/questions/75105/what-datatype-should-be-used-for-storing-phone-numbers-in-sql-server-2005 –

+3

В дополнение к комментарию от @Rufus L (который работает, байты хранятся от 0 до 255, что даже не достаточно велико для кода Северной Америки, не говоря уже о полном номере телефона), номера телефонов никогда не должны храниться в числовом типе. Если вам не нужно делать математику, не храните его как число. Это не даст вам ничего, кроме скорби в долгосрочной перспективе. –

ответ

0

Эта линия:

com.Parameters.Add("@name", SqlDbType.TinyInt).Value = this.phone; 
  1. Вы пытаетесь передать объект телефона в качестве параметра имени.
  2. Вы используете tinyint, varchar (10) будет лучшим вариантом, но если вы настаиваете на использовании целого числа, int64 должен быть достаточным.
  3. Если вы используете Int, чтобы убедиться, что только цифры передаются, делать регулярные проверки выражений на строку для цифр с использованием «[0-9] {10}»
Смежные вопросы