2013-11-25 44 views
1

我是C#的新手,我知道這個問題已經被廣泛地討論過了,但我無論如何都被抓住了。我無法弄清楚爲什麼我的解析不起作用。我從另一個類訪問的窗體上有一個文本框控件,但我不斷收到上面提到的錯誤,不知道爲什麼。無法解析相關的int - 「不能隱式地將類型字符串轉換爲int」

這裏是我的代碼:

public partial class Edit : XtraForm 
{ 
    public int _PatientID; 
    public string _FirstName; 
    public string _LastName; 
    public string _Address; 
    public string _City; 
    public string _State; 
    public string _ZipCode; 
    public string _Phone; 

    public Edit(int _PatientID, string _FirstName, string _LastName, 
       string _Address, string _City, string _State, 
       string _ZipCode, string _Phone) 
    { 
     InitializeComponent(); 

     // This is the line I am talking about 
     _PatientID = Convert.ToInt32(txtPatientID.Text); 

     _FirstName = txtFirstName.Text; 
     _LastName = txtLastName.Text; 
     _Address = txtAddress.Text; 
     _City = txtCity.Text; 
     _State = txtState.Text; 
     _ZipCode = txtZipCode.Text; 
     _Phone = txtPhone.Text; 
    } 

    public class PatientService 
    { 
     Edit ed = new Edit(_PatientID, _FirstName, _LastName, _Address, 
          _City, _State, _ZipCode, _Phone); 

     SACommand cmd = new SACommand 
      (@"INSERT INTO patient(patient_id, first_name, last_name, 
            address, city, state, zipcode, phone) 
      VALUES ('" 
      + _PatientID + "','" 
      + _FirstName + "','" 
      + _LastName + "','" 
      + _Address + "','" 
      + _City + "','" 
      + _State + "','" 
      + _ZipCode + "','" 
      + _Phone + "');"); 
     cmd.Connection = conn; 
     cmd.ExecuteNonQuery(); 
     MessageBox.Show("A new patient has been inserted"); 
     conn.Close(); 
    } 

我真的很感激任何幫助。

+3

我懷疑你得到的錯誤,因爲文本框中的文本不能轉換爲數字。該文本框中的值是多少? –

+3

此外,將值直接插入到sql語句中並不是一種好的做法,這會讓您打開SQL注入攻擊。你應該使用參數 – codemonkeh

+0

在你的構造函數中,你改變本地參數而不是類字段。 –

回答

0

的一些問題:

正如評論說,不要用直接的SQL語句,嘗試PARAMATERS,會給你額外的安全性(這裏有一個小頁面,會給你一個良好的開端:http://www.dotnetperls.com/sqlparameter)。

另一個:使用C#屬性,而不是公共字段。這裏的C# Programming Guide關於他們的網頁。

如果你想將一個字符串解析爲int,Convert.ToInt32(string)應該可以工作,但它可能會拋出一個異常。看看這個從MSDN

使用ToInt32(字符串)方法等價於將值傳遞給Int32.Parse(String)方法。值通過使用當前線程文化的格式約定來解釋。 如果您不想在轉換失敗時不處理異常,則可以調用Int32.TryParse方法。它返回一個布爾值,指示轉換是成功還是失敗。

所以如果你想減輕一個異常(也許使用默認值),你可以試試TryParse

至於你的代碼去,它應該工作......你可以在那裏放置一個斷點,看看txtPatientID.Text的價值是什麼?

+0

謝謝,我會嘗試這個儘快 – user3034095

相關問題