2015-10-27 36 views
-4

我試圖做一個插入到交易表中,從某個文本框,SQL Server和C#的Windows窗體一個標籤,用下面的代碼:如何將字符串轉換爲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'得到什麼?從異常的細節來看,顯然你傳遞的是字符串而不是int,導致'FormatException'.please檢查這些字段值是否可以轉換爲int? –

+2

還要爲表單添加驗證,以便用戶*不能*在用於數字數據的文本框中輸入任意文本 –

+0

label17.Text是計算qtychoiceTxt.Text上所選數量與產品價格之後的總成本。我試圖保存這些值 – Irfan

回答

0

你必須使用Convert.ToInt32爲 「label17.Text」 和 「qtychoiceTxt.Text」 轉換爲整數( 「串」)

+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 *這裏的* *是適當的。更好的是要求用戶修改數據,而不是默認存儲0。 0意外的「付款」不是一個快樂的情況 –