2015-10-27 3 views
-4

Я пытаюсь сделать вставку в таблицу транзакций в SQL Server из определенных текстовых и одна метки на # Windows Form C, с помощью следующего кода:Как преобразовать строку в int32 C#?

AppProcess abc = new AppProcess(); 
SqlConnection sqlconn1 = abc.GetConn(); 

SqlCommand sqlinsert = new SqlCommand("insert into Payment values 
(@TID,@EID,@CustID,@CFName,@CLName,@BID,@BName,@Price,@Qty,@TransDate)", 
sqlconn1); 

DataTable dtCustomer = new DataTable(); 
sqlconn1.Open(); 

sqlinsert.Parameters.Add(new SqlParameter("@TID", SqlDbType.VarChar, 10)); 
sqlinsert.Parameters.Add(new SqlParameter("@EID", SqlDbType.VarChar, 10)); 
sqlinsert.Parameters.Add(new SqlParameter("@CustID", SqlDbType.VarChar, 10)); 
sqlinsert.Parameters.Add(new SqlParameter("@CFName", SqlDbType.VarChar, 100)); 
sqlinsert.Parameters.Add(new SqlParameter("@CLName", SqlDbType.VarChar, 100)); 
sqlinsert.Parameters.Add(new SqlParameter("@BID", SqlDbType.VarChar, 10)); 
sqlinsert.Parameters.Add(new SqlParameter("@BName", SqlDbType.VarChar, 100)); 
sqlinsert.Parameters.Add(new SqlParameter("@Price", SqlDbType.Int)); 
sqlinsert.Parameters.Add(new SqlParameter("@Qty", SqlDbType.Int)); 
sqlinsert.Parameters.Add(new SqlParameter("@Transdate", SqlDbType.Date)); 

sqlinsert.Parameters["@TID"].Value = tidTxt.Text; 
sqlinsert.Parameters["@EID"].Value = eidTxt.Text; 
sqlinsert.Parameters["@CustID"].Value = cidTxt.Text; 
sqlinsert.Parameters["@CFName"].Value = cfnameTxt.Text; 
sqlinsert.Parameters["@CLName"].Value = clnameTxt.Text; 
sqlinsert.Parameters["@BID"].Value = bidTxt.Text; 
sqlinsert.Parameters["@BName"].Value = bnameTxt.Text; 
sqlinsert.Parameters["@Price"].Value = label17.Text; 
sqlinsert.Parameters["@Qty"].Value = qtychoiceTxt.Text; 
sqlinsert.Parameters["@Transdate"].Value = TransDateTxt.Text; 

sqlinsert.ExecuteNonQuery(); 

Но когда я запустить приложение, он создает эта ошибка: click here to see what the error looks like

Я смущен, какая строка вызывает ошибку. И как преобразовать строку в Int32?

+1

что вы получаете от 'label17.Text' и' qtychoiceTxt.Text'? Из детали исключения очевидно, что вы передаете строки, а не ints, вызывая 'FormatException'.please, проверяете ли эти значения полей значение int? –

+2

Также добавьте подтверждение в свои формы, чтобы пользователи * не могли * набирать произвольный текст в текстовых боксах, предназначенных для числовых данных. –

+0

label17.Text - это общая стоимость после расчета количества, выбранного на qtychoiceTxt.Text с ценой продукта. Я пытаюсь сохранить эти значения. – Irfan

ответ

0

Вы должны конвертировать "label17.Text" и "qtychoiceTxt.Text" до целого числа, используя Convert.ToInt32 ("строка")

+1

это может быть потеряно, если значение любого из полей не является int. Вместо этого используйте «TryParse» –

+0

Да, он прав –

+2

Не совсем - на данный момент лучше выбросить исключение, чем записать сумму 0 или 0 штук. 'TryParse' следует использовать для * проверки * ввода для хранения хранимой процедуры, даже называется –

6

Использование должны использовать как этот код для новообращенного:

command.Parameters.Add("@Qty", SqlDbType.Int).Value = Convert.ToInt32(qtychoiceTxt.Text); 
+0

, это может быть потеряно, если значение любого из полей не является int. Вместо этого я предлагаю использовать «TryParse». –

+0

@AmitKumarGhosh Это простой конвертировать и не проверять. Для проверки мы должны обрабатывать значение, также мы можем использовать int.TryParse –

+1

@AmitKumarGhosh break * is * подходит здесь. Лучше попросить пользователя исправить данные, кроме 0 по умолчанию. Случайный «платеж» 0 не является счастливой ситуацией –

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